C#访问派生类中的受保护成员

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

Tej*_*ejs 7

您没有从类中访问它,而是尝试访问变量,就像它一样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.