我們對此結果毫無疑問,這是否代表 B1 和 B2 沒有區別?若上述程式碼作為推理前提在客觀上已足夠充分,答案是肯定的。但我無法知道論據是否已達充分程度。於是修改程式碼,為類別和介面添加成員觀察行為:
interface IC { void M(); }
class A : IC
{
void IC.M() { Console.WriteLine("In class A"); }
}
class B1 : A { }
class B2 : A, IC { }
class Program
{
static void Main()
{
List<IC> cs = new List<IC>();
cs.Add(new A()); cs.Add(new B1()); cs.Add(new B2());
foreach (IC c in cs) c.M();
}
}
程式正常編譯,結果:
In class A
In class A
In class A
OH, MY GOD! 效果又一樣!難道 B1 跟 B2 真的沒區別?再修改:
interface IC { void M(); }
class A : IC
{
void IC.M() { Console.WriteLine("In class A"); }
}
class B1 : A
{
void IC.M() { Console.WriteLine("In class B1"); }
}
class B2 : A, IC
{
void IC.M() { Console.WriteLine("In class B2"); }
}