now*_*ed. 3 .net c# protected access-modifiers
我正在提出一个关于protectedvs 的问题(protected internal因为我仍然不确定,并且无法控制它们).
任何帮助深表感谢.
// DLL 1
namespace Assembly1
{
class class1 : class2
{
static void Main()
{
new class1().Test();
}
private void Test()
{
Console.WriteLine(this.sample);
}
}
}
Run Code Online (Sandbox Code Playgroud)
// 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 ?
}
}
Run Code Online (Sandbox Code Playgroud)
我对这两行都有相同的行为.
// protected string sample = "Test";
protected internal string sample = "Test";
Run Code Online (Sandbox Code Playgroud)
但我相信应该有一些区别.
MSDN说:
受保护:访问仅限于从包含类派生的包含类或类型.受保护的内部: 访问仅限于从包含类派生的当前程序集或类型.
只要我从基类继承,我就可以访问外部程序集protected和protected internal外部程序集.
很混乱!两者看起来完全相似.任何人都可以通过修改上面的例子来解释我吗?
pok*_*oke 13
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
Run Code Online (Sandbox Code Playgroud)
protected internal是protected OR internal,因此它的行为与它所定义的程序集之外的行为完全相同,并且在同一程序集内部表现为内部行为.
有趣的是,CLR包含一个受保护的AND内部访问修饰符,它可能包含在下一版本的C#中private protected- 这限制了对它所定义的程序集中的子类型的访问.
| 归档时间: |
|
| 查看次数: |
6034 次 |
| 最近记录: |