有人能解释一下c#中受保护的内部修饰符和受保护的内部修饰符的区别吗?看起来它们的行为是一样的。
当前回答
保护成员
类的受保护成员仅在包含类中可用(在其中声明了类),并且在程序集内部和程序集外部的派生类中可用。
表示驻留在程序集外部的类仅通过继承该类来使用其他程序集的受保护成员。
可以通过继承该类在程序集外部公开Protected成员,并仅在派生类中使用它。
注意:不能使用派生类中的对象访问受保护的成员。
内部成员
类的内部成员是可用的,或在程序集中创建对象或在派生类中访问,或者您可以说可以在程序集中的所有类中访问它。
注意:内部成员不能在程序集外部使用对象创建或在派生类中访问。
保护内部
Protected内部访问修饰符为Protected或Internal的组合。
受保护内部成员可以在其声明创建对象或通过继承该类的整个程序集中使用。并且只能在派生类的程序集之外访问。
注意:受保护的内部成员在同一程序集内作为内部成员工作,在程序集外作为受保护成员工作。
其他回答
我已经把这些术语的定义读得很清楚了。
Protected:访问限制在类定义内以及从该类继承的任何类内。类型或成员只能通过同一类或结构中的代码或从该类派生的类中的代码访问。
内部:访问仅限于当前项目程序集中定义的类。类型或成员只能由同一类中的代码访问。
Protected-Internal:访问权限仅限于从包含类派生的当前程序集或类型。
保护成员
类的受保护成员仅在包含类中可用(在其中声明了类),并且在程序集内部和程序集外部的派生类中可用。
表示驻留在程序集外部的类仅通过继承该类来使用其他程序集的受保护成员。
可以通过继承该类在程序集外部公开Protected成员,并仅在派生类中使用它。
注意:不能使用派生类中的对象访问受保护的成员。
内部成员
类的内部成员是可用的,或在程序集中创建对象或在派生类中访问,或者您可以说可以在程序集中的所有类中访问它。
注意:内部成员不能在程序集外部使用对象创建或在派生类中访问。
保护内部
Protected内部访问修饰符为Protected或Internal的组合。
受保护内部成员可以在其声明创建对象或通过继承该类的整个程序集中使用。并且只能在派生类的程序集之外访问。
注意:受保护的内部成员在同一程序集内作为内部成员工作,在程序集外作为受保护成员工作。
Protected可以被任何程序集的任何子类使用。
Protected internal是指受保护的所有内容,再加上同一程序集中的任何内容都可以访问它。
重要的是,它并不意味着“同一程序集中的子类”——它是两者的并集,而不是交集。
下表显示了其中的差异。Protected internal与Protected相同,只是它还允许来自同一程序集中其他类的访问。
Protected:变量或方法只对子类可用(在任何程序集中)
受保护的内部:可用于任何程序集中的子类和同一程序集中的所有类