在依賴注入方面顯式實現接口有沒有好處?依賴注入和顯式接口實現
據我瞭解,接口可以明確或隱含實現:
interface IFoo
{
void Bar();
}
//implicit implementation
class Foo1 : IFoo
{
public void Bar(){}
}
//explicit implementation
class Foo2 : IFoo
{
void IFoo.Bar(){}
}
現在明確的實現只能通過調用接口方法,而隱含的實現可以直接在被稱爲被稱爲類的實例:
class Baz
{
void Ba()
{
Foo1 foo1 = new Foo1();
foo1.Bar();
Foo2 foo2 = new Foo2();
foo2.Bar(); //syntax error
IFoo foo2_explicit = new Foo2();
foo2_explicit.Bar();
}
}
因此,使用顯式接口實現中,一個不能意外調用一個具體類的方法,但人們必須調用接口方法。這是否會阻止緊密耦合的代碼作爲DI的一個目的,還是我在這裏咆哮錯誤的樹?畢竟,一個人不能意外編寫得到注入,而不是一個接口的具體類的構造函數或方法:
class Baz
{
void Ba(Foo2 foo)
{
foo.Bar(); //syntax error
}
void Bb(IFoo foo)
{
foo.Bar();
}
}
您可以更新代碼以使用IFoo而不是Foo嗎?這在我看來是令人困惑... – 2015-07-28 11:22:49
完成 - 對不起,通常我尊重代碼約定... – Thaoden