Yip*_*Yay 11 c# encapsulation protected derived-class visual-studio-2010
我写了以下代码:
public class A
{
protected string Howdy = "Howdy!";
}
public class B : A
{
public void CallHowdy()
{
A a = new A();
Console.WriteLine(a.Howdy);
}
}
Run Code Online (Sandbox Code Playgroud)
现在,在VS2010其中导致以下编译错误:
无法通过"A"类型的限定符访问受保护的成员"Aa"; 限定符必须是'B'类型(或从中派生).
这对我来说似乎很不合逻辑 - 为什么我不能protected从类的方法访问类实例的字段,这是从它派生的?
那么,为什么会这样呢?
找到了严格的答案 - http://blogs.msdn.com/b/ericlippert/archive/2005/11/09/491031.aspx
您没有从类中访问它,而是尝试访问变量,就像它一样public.你不会期望这个编译,这几乎是你想要做的:
public class SomethingElse
{
public void CallHowdy()
{
A a = new A();
Console.WriteLine(a.Howdy);
}
}
Run Code Online (Sandbox Code Playgroud)
没有任何关系,听起来你很困惑为什么那个领域不公开.
现在,你可以这样做,如果你想:
public class B : A
{
public void CallHowdy()
{
Console.Writeline(Howdy);
}
}
Run Code Online (Sandbox Code Playgroud)
因为在这个实例中B继承了数据A.
| 归档时间: |
|
| 查看次数: |
6999 次 |
| 最近记录: |