4

次のようなコードがあるとします。

interface I
{
    int P { get; }
}

class A : I
{
    public virtual int P { get { return 0; } }
}

class B : A
{
    public override int P { get { return 1; } }
}

class C : B, I
{
    public int P { get { return 2; } }
}

A c = new C();
I ic = new C();

ここで問題は、cP と ic.P は何になるのかということです。実際には1と2になることはわかっていますが、その理由を説明していただけますか?

4

5 に答える 5

2

class B : Aクラス B がクラス A を継承することを意味します。簡単に言えば、クラス B はクラス A が持つすべてのプロパティ関数を持つことを意味します。しかし、あなたが言うときpublic override int P、(「キーワード」はオーバーライドです)は、「P」クラスBの場合、別の方法で動作することを意味します。「P」のクラス A を「隠す」ようなものです。

ドキュメントを読むとさらに便利です。

継承

于 2013-05-19T18:12:15.653 に答える