![718:public internl class;partial []](http://pic.xiahunao.cn/yaotu/718:public internl class;partial [])
1public internal class Product{}代码解析public internal class Product1. 语法报错修饰符冲突无法编译C# 类的访问修饰符不能同时写publicinternal二者互斥public程序集内外任意代码都能访问internal仅当前项目同一程序集内可访问同时写两个编译器直接报错二选一即可。2. 两种正确写法方案1仅 internal同项目可用外部程序集不可见工业上位机常用internalclassProduct_F{}方案2仅 public全解决方案/引用此项目都能调用publicclassProduct_FPD{}3. 补充嵌套类才允许组合修饰符只有类里面嵌套的子类才能同时使用public internal顶级类不支持// 合法示例嵌套类internalclassFactory{// 嵌套子类同程序集内公开外部程序集看不到外层Factory自然访问不到publicinternalclassProduct{}}4. 场景建议Product属于业务产品模型推荐普通业务实体用internal class Product隔离外部程序集需要给其它模块/插件调用改用public class Product。5. 拓展常用访问修饰符对比修饰符访问范围public所有地方internal当前项目内private仅当前类内部protected当前类 子类protected internal当前项目 或 任意程序集子类2public partial class Product:ObservableObject partial ?前提是你在Product类中使用了CommunityToolkit.Mvvm 的源码生成特性比如[ObservableProperty][RelayCommand][NotifyPropertyChangedFor]有以上任一特性 →必须加partial如果只是单纯继承ObservableObject没用源码生成器 →不需要partial比如// 不需要 partial没用到代码生成publicclassProduct_FP:ObservableObject{privatestring_name;publicstringName{get_name;setSetProperty(ref_name,value);// 手写属性不用生成器}}// 需要 partial用到代码生成publicpartialclassProduct_FP:ObservableObject{[ObservableProperty]privatestring_name;// 编译器自动生成 Name 属性[RelayCommand]privatevoidDoSomething(){}// 编译器自动生成 DoSomethingCommand}所以你要确认Product_FP里有没有用[ObservableProperty]或[RelayCommand]。如果用到了却没加partial编译就会失败——源码生成器找不到目标类。