我們對此結果毫無疑問,那麼這是否代表著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");
}
}