次のようなコードがあるとします。
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になることはわかっていますが、その理由を説明していただけますか?