可能重複:
C#: Interfaces - Implicit and Explicit implementation
implicit vs explicit interface implementation隱<>顯式接口
你好
任何人都可以解釋我的區別是什麼的隱性和顯性接口之間?
謝謝!
可能重複:
C#: Interfaces - Implicit and Explicit implementation
implicit vs explicit interface implementation隱<>顯式接口
你好
任何人都可以解釋我的區別是什麼的隱性和顯性接口之間?
謝謝!
隱式接口的實現是,你必須與接口相同簽名的方法。
明確的接口實現是您明確聲明方法屬於哪個接口的地方。
interface I1
{
void implicitExample();
}
interface I2
{
void explicitExample();
}
class C : I1, I2
{
void implicitExample()
{
Console.WriteLine("I1.implicitExample()");
}
void I2.explicitExample()
{
Console.WriteLine("I2.explicitExample()");
}
}
然後有什麼區別?爲什麼你更喜歡一個在另一個之上? – Killerwes 2011-05-26 14:12:08
如果您有兩個接口具有相同的方法簽名,您可以顯式聲明兩個方法爲每個方法實現方法。或者,如果您希望清楚的是實現接口的方法可以明確聲明。存在隱式聲明是因爲大多數情況下你並不需要明確聲明,並且可以假定接口實現。 – 2011-05-26 14:15:53
顯式簡單意味着您指定接口,隱式意味着您不接受。
例如:
interface A
{
void A();
}
interface B
{
void A();
}
class Imp : A
{
public void A() // Implicit interface implementation
{
}
}
class Imp2 : A, B
{
public void A.A() // Explicit interface implementation
{
}
public void B.A() // Explicit interface implementation
{
}
}
當你實現一個接口explicitlty,該接口上的方法將只有當對象作爲接口引用可見:在
public interface IFoo
{
void Bar();
}
public interface IWhatever
{
void Method();
}
public class MyClass : IFoo, IWhatever
{
public void IFoo.Bar() //Explicit implementation
{
}
public void Method() //standard implementation
{
}
}
如果某個地方代碼你有這個對象的參考:
MyClass mc = new MyClass();
mc.Bar(); //will not compile
IFoo mc = new MyClass();
mc.Bar(); //will compile
對於標準im plementation,這不要緊,你如何引用對象:
MyClass mc = new MyClass();
mc.Method(); //compiles just fine
另外,如果你想知道爲什麼明確的實施存在,那是因爲你可以實現同樣的方法,從多個接口(名稱和簽名);那麼如果你需要不同的功能,或者只是返回類型不同,你不能通過簡單的重載來實現。那麼你將不得不使用明確的實現。一個例子是List<T>
實施IEnumerable
和IEnumerable<T>
並且都具有GetEnumerator()
但具有不同的返回值。
在相關列表中有大約十幾個確切的愚人節...... – 2011-05-26 14:04:34