参见英文答案 >
What is the difference between ‘protected’ and ‘protected internal’? 10个
我正在提出一个问题(再次)关于受保护的内容,因为我仍然不确定并且无法控制它们.
我正在提出一个问题(再次)关于受保护的内容,因为我仍然不确定并且无法控制它们.
任何帮助深表感谢.
// DLL 1
namespace Assembly1 { class class1 : class2 { static void Main() { new class1().test(); } private void test() { Console.WriteLine(this.sample); } } }
// DLL 2
namespace Assembly2 { public class class2 { // protected string sample = "Test"; protected internal string sample = "Test"; //Same behavior when using protected and protected internal. Why ? } }
我对这两行都有相同的行为.
// protected string sample = "Test"; protected internal string sample = "Test";
但我相信应该有一些区别.
MSDN says:
Protected: Access is limited to the containing class or types derived from the containing class.Protected Internal: Access is limited to the current assembly or types derived from the containing class.
只要我从基类继承,我就可以从外部程序集访问受保护和受保护的内部.
很混乱!两者看起来完全相似.任何人都可以通过修改上面的例子来解释我吗?
解决方法
protected意味着您可以从任何子类型(当然还有声明类型本身)访问该成员.因此,无论该子类型在哪里,即使它在另一个程序集中,您仍然可以访问所有受保护的成员.
internal表示您可以从同一程序集中的任何类型访问该成员.因此,即使是位于同一程序集中的完全不相关的类也可以访问该成员.
protected internal结合了两者,意味着两者都单独应用.因此,您可以从任何子类型访问该成员,也可以从同一程序集中的任何类型访问该成员.
// Assembly 1 class A { protected int foo; internal int bar; protected internal int baz; } class B : A {} // can access: foo,bar,baz class C {} // can access: bar,baz // Assembly 2 class D : A {} // can access: foo,baz class E {} // can access neither
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。