C#多重继承,使用保护成员

C# multiple inheritance, using protected member

我在使用继承方面没有什么问题。当 class C 中的 first 和 second 受到保护时,我既不能更改它们的值,也不能更改 class B 中的 first 的值。如果这些变量是 public 一切正常,但在这种情况下使用 protected 有什么意义?

class A
{
    protected int first { get; set; }
}

class B : A
{
    protected int second { get; set; }

    public Show() 
    {
        A a = new A();
        a.first = 5;
    }
}

class C : B
{
    private int third { get; set; }

    static void Main()
    {
        B b = new B();
        b.first = 1;
        b.second = 2;
    }
}

主要问题仅仅是因为您将程序的入口点放在要测试的 class 中。因为 Main() 是静态的,所以您无法访问 C 的(继承的)实例成员。

所以分开吧:

class Program
{
    static void Main()
    {
        C c = new C();
        c.Test();
    }
}

您的 class C 继承自 B,因此 C 可以像这样访问 B 的受保护成员:

class C : B
{
    private int third { get; set; }

    public void Test()
    {
        first = 1; // from A
        second = 2; // from B
        third = 3; // from C
    }
}

通过在 Cnewing 一个 BBC 的那些实例之间没有任何关系,所以你可以在那里访问是 Bpublicinternal 成员。

当您处理自己的实例时,您可以访问受保护的成员 class:

class B :A
{
    protected int second { get; set; }

    public show() {
        this.first = 5; //This is valid
    }
}

如果您被允许任意访问您的基础 class' protected 成员,在基础 class 的 any 实例上,这将被允许​​:

class DDefinitelyNotB : A
{
}

class B :A
{
    protected int second { get; set; }

    public show() {
        A a = new DDefinitelyNotB ();
        a.first = 5;
    }
}

这可能对 DDefinitelyNotB 不利,因为 other classes 恰好来自 A能够干扰从 A.

继承的 protected 成员