私有、受保护和内部受保护之间的区别

14

C# 7.2引入了private protected修饰符,与internal protected有何区别?

文档中说:

private protected成员可以被从包含类派生的类型访问,但仅限于包含的程序集内。

这不就是internal protected所做的吗?


不,internal protected 可以在派生类和当前程序集中访问。 - rokkerboci
https://blogs.msdn.microsoft.com/mazhou/2017/10/05/c-7-series-part-5-private-protected/ - Ola Ekdahl
2
如果类型从其他类型派生,则可以从其他程序集访问内部受保护的成员。但是,私有受保护的成员永远无法从其他程序集访问。 - Tim Schmelter
1个回答

26

来自访问修饰符(C#编程指南)

Protected Internal:类型或成员可以被在其声明的程序集中的任何代码访问,也可以通过另一个程序集中派生自该类的类进行访问。

Private Protected:类型或成员只能在其声明的程序集内被访问,由同一类中的代码或派生自该类的类型的代码访问。

另一个有用的链接:C# 7系列,第5部分:Private Protected


微软文档中的第二个引用似乎有歧义。我认为它的意思是私有受保护类型/成员可以在其声明的程序集内部访问,或者在同一类中访问,或者在从该类派生的类型中访问,这与受保护的内部相同。我认为用“通过任一方式”替换“通过”可以解决这个问题。 - Ruben9922
11
我会记住它的定义为:
Protected Internal = Protected 或 Internal - 能被当前程序集内任何代码访问,或者在另一程序集中派生类的内部访问。
Private Protected = Protected 和 Internal - 可以在同一程序集中访问,也可以在继承类中访问。
- Demonel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接