.Net中受保护的内部意味着啥[重复]
Posted
技术标签:
【中文标题】.Net中受保护的内部意味着啥[重复]【英文标题】:What does Protected Internal mean in .Net [duplicate].Net中受保护的内部意味着什么[重复] 【发布时间】:2011-02-08 17:13:27 【问题描述】:Protected 意味着,我们只能在派生类中访问该成员,而 internal 意味着我们可以使用对象在同一程序集中的任何类型中访问该成员。 那么我是否可以将受保护的内部成员视为同一程序集中的公共成员。和不同程序集中的受保护成员。
编辑:
namespace pracConsole
class Class1
protected internal int val;
public int hello()
Console.WriteLine("This is method pracConsole.hello");
Console.ReadLine();
return 1;
class program
static void Main(string[] args)
Class1 _class1 = new Class1();
_class1.val = 3;
_class1.hello();
Console.ReadLine();
看到我能够访问,在非派生类中受保护的内部......所以它在同一个程序集中作为公共工作......你说什么。
【问题讨论】:
+1 好问题。我也遇到了这个麻烦,并认为这意味着受保护的 AND 内部,但事实并非如此,正如下面 Jason 所指出的那样。 【参考方案1】:这是一个令人困惑的问题。
protected的意思是“只有这个类和派生类”。
internal 表示“仅此程序集中的类”。
protected internal 表示“protected OR internal”(同一程序集中的任何类,或任何派生类 - 即使它在不同的程序集中)。
即它确实不表示“受保护的 AND 内部”(仅同一程序集中的派生类)。
【讨论】:
所以你说它在同一个程序集中是公开的,在不同的程序集中受到保护 哇,作为一个初学者程序员很容易不理解 and 和 or 之间的细微差别。 哇,这真的很奇怪,我确信它会是 AND。 但是,您也可以使用InternalsVisibleToAttribute
将内部组件暴露给其他受信任的库
你可以,但这实际上只是一个丑陋的障碍,以支持 VS 采用的设计不佳的单元测试方法,我建议不要在生产代码中使用它。 (它本质上是“朋友”,只是打破了封装)【参考方案2】:
内部意味着只有同一程序集中的类才能访问该成员
受保护意味着该成员只能被派生类型访问(子类访问超类)。
受保护的内部是两者的结合。它只能在同一个程序集中访问,并且只能作为子类访问。
更简单地说: 'protected internal' 表示'protected or internal' - 这意味着它可以在同一个程序集中或通过派生类型访问。
【讨论】:
我了解这些东西,但我想知道,我可以安全地说它在同一个程序集中公开并在不同程序集中受到保护 您自相矛盾:“它只能在同一个程序集中访问并且它只能作为子类访问。”与“这意味着它可以在同一程序集中或通过派生类型访问”。至少这是我对你的帖子的理解。也许您应该删除第三段中以“只能访问...”开头的第二句。【参考方案3】:不是真的。声明语句中的Protected 关键字指定只能从同一类内或从该类派生的类中访问元素。所以你可以从同一个库而不是所有类中访问它。
您不能从任何其他库访问受保护的内部,因为Internal 意味着只能从同一个程序集访问。
【讨论】:
错误答案。不过,其他海报已经正确回答了这个问题:在其组装内部,在其外部受到保护。而且它不是 .NET 中的“库”,而是“程序集”。【参考方案4】:受保护的内部意味着只有派生类型和同一程序集中的类型才能访问该成员。这很奇怪,但这是一种工会关系。这意味着,任何可以访问标记为内部或受保护的成员的东西都可以访问该成员。
【讨论】:
所以想一想,如果我能够通过同一程序集中的对象访问受保护的内部,那么它不是作为公共工作吗。以上是关于.Net中受保护的内部意味着啥[重复]的主要内容,如果未能解决你的问题,请参考以下文章