有人能解释一下c#中受保护的内部修饰符和受保护的内部修饰符的区别吗?看起来它们的行为是一样的。


当前回答

我已经把这些术语的定义读得很清楚了。

Protected:访问限制在类定义内以及从该类继承的任何类内。类型或成员只能通过同一类或结构中的代码或从该类派生的类中的代码访问。

内部:访问仅限于当前项目程序集中定义的类。类型或成员只能由同一类中的代码访问。

Protected-Internal:访问权限仅限于从包含类派生的当前程序集或类型。

其他回答

这个描述可能会有帮助

内部成员

类的内部成员是可用的,或在程序集中创建对象或在派生类中访问,或者您可以说可以在程序集中的所有类中访问它。

保护成员

类的受保护成员仅在包含类中可用(在其中声明了类),并且在程序集内部和程序集外部的派生类中可用。

保护内部

Protected内部访问修饰符为Protected或Internal的组合。

受保护内部成员可以在其声明创建对象或通过继承该类的整个程序集中使用。并且只能在派生类的程序集之外访问。

可以将protected internal看作是在同一个字段、属性或方法上应用两个访问修饰符(protected和internal)。

在现实世界中,想象一下我们为人们提供参观博物馆的特权:

城里的每个人都可以参观博物馆(内部)。 父母居住的城市以外的任何人都可以参观博物馆(受保护)。

我们可以这样把它们放在一起:

城内(内部)和城外(受保护)所有父母居住在这里的人都可以参观博物馆(受保护的内部)。

编程世界:

internal:该字段在程序集(项目)中的任何地方都可用。这就像说它在它的项目范围内是公共的(但不能在项目范围外访问,甚至不能被从该类继承的程序集之外的那些类访问)。该类型的每个实例都可以在该程序集(项目范围)中看到它。

Protected:仅仅意味着所有派生类都可以看到它(在程序集内部或外部)。例如,派生类可以使用:base.NameOfProtectedInternal查看其方法和构造函数内部的字段或方法。

所以,把这两个访问修饰符放在一起(protected internal),你就有了一些可以在项目内公开的东西,并且可以被那些在他们的作用域内继承了该类的人看到。

它们可以写在内部保护,并且不改变意思,但是方便写在内部保护。

Protected:变量或方法只对子类可用(在任何程序集中)

受保护的内部:可用于任何程序集中的子类和同一程序集中的所有类

在实践中,关于方法:

Protected -继承类可访问,否则为私有。

内部-仅对程序集中的类是公共的,否则为私有的。

Protected internal -意味着Protected或internal -方法可以被继承的类和程序集中的任何类访问。

我已经把这些术语的定义读得很清楚了。

Protected:访问限制在类定义内以及从该类继承的任何类内。类型或成员只能通过同一类或结构中的代码或从该类派生的类中的代码访问。

内部:访问仅限于当前项目程序集中定义的类。类型或成员只能由同一类中的代码访问。

Protected-Internal:访问权限仅限于从包含类派生的当前程序集或类型。