今天我碰巧發現一個C#類可以以隱式和顯式方式繼承一個接口。這讓我感到驚訝。如果C#以這種方式工作,則以不同方式引用時,一個實例的行爲可能會有所不同。爲什麼C#類可以隱式地和顯式地從一個接口繼承?
interface IFoo
{
void DoSomething();
}
class Foo : IFoo
{
#region IFoo Members
public void DoSomething()
{
Console.WriteLine("do something implicitly");
}
#endregion
#region IFoo Members
void IFoo.DoSomething()
{
Console.WriteLine("do something explicitly");
}
#endregion
}
Foo f = new Foo();
f.DoSomething();
((IFoo)f).DoSomething();
上面的代碼運行並輸出
do something implicitly
do something explicitly
我相信,這種設計的C#使行爲的不一致性。也許這是強制性的,一個C#類可以以隱式或expliict方式從一個接口繼承,但不能同時接受。
有什麼理由說爲什麼C#是這樣設計的?
我沒有注意到你可以同時做到這一點。這似乎有點傻... – 2008-10-31 10:26:41
這並不傻。閱讀答案。 – 2008-10-31 10:39:25
對不起,我試圖添加「顯式接口成員實現」作爲標籤(這是你使用的功能的名稱),但顯然標籤會太長。 :) – Rytmis 2008-10-31 11:11:03