【发布时间】:2012-05-26 07:38:07
【问题描述】:
我写了以下代码:
public class A
{
protected string Howdy = "Howdy!";
}
public class B : A
{
public void CallHowdy()
{
A a = new A();
Console.WriteLine(a.Howdy);
}
}
现在,在VS2010 中会导致以下编译错误:
无法通过“A”类型的限定符访问受保护的成员“A.a”;限定符必须是“B”类型(或派生自它)。
这对我来说似乎很不合逻辑 - 为什么我不能从派生自类的方法访问类实例的 protected 字段?
那么,为什么会发生这种情况?
找到一个严格的答案 - http://blogs.msdn.com/b/ericlippert/archive/2005/11/09/491031.aspx
【问题讨论】:
-
+1 表示写得很清楚的问题。 :)
-
你可以做的是创建一个受保护的静态方法,它只提供对派生类的访问,如下所示: public class A { protected string Howdy = "Howdy!"; } 公共类 B : A { public void CallHowdy() { A a = new A(); Console.WriteLine(a.Howdy); } }
标签: c# visual-studio-2010 encapsulation protected derived-class