2012-10-09 34 views
4
public interface IMyInterface 
{ 
    List<string> MyList(string s) 
} 

public class MyClass : IMyInterface 
{ 
    public List<string> MyList(string s) 
} 

的實現之間有什麼區別:C# - 如何正確使用接口

[Method] 
MyClass inst = new MyClass(); 
... 

或者:

[Method] 
var inst = new MyClass() as IMyInterface; 
... 

或者:

[Method] 
IMyInterface inst = new MyClass(); 
... 

是什麼使用IMyInterface的實現的正確方法?

回答

9

其次是可怕的。它真的等於

IMyInterface inst = new MyClass(); 

但它甚至不檢查MyClass實現接口。這只是一種使用var的方式,但在其他地方明確指定了類型。伊克。

通常,使用接口類型(如上所述或第三個選項)聲明變量會更清晰,如果這就是您所依賴的 - 它使用戶清楚您不需要任何額外的成員由班級宣佈。有關更多信息,請參閱"What does it mean to program to an interface?"

請注意,這與實現接口沒有任何關係。 MyClass是實現接口的類。這只是與使用一個接口的實現。

+0

所以我應該使用:MyClass inst = new MyClass(); ? – user1481183

+0

@ user1481183:這取決於您的代碼*是否需要*使用MyClass特定的成員,或者是否可以使用該接口。 –

+0

因此,如果我的代碼需要使用MyClass特定的成員,請使用第一個選項,否則使用第三個選項? – user1481183

5

MyClass inst = new MyClass();

它創建使用具體類型的對象。多態性是不成立的。

var inst = new MyClass() as IMyInterface

編譯器能夠推斷它是根據演員和使用VAR哪種類型。該類型是IMyInterface的......

IMyInterface inst = new MyClass();

在我看來最好的。通過使用MyInterface,您可以實現多態性,在運行時更改inst指向的內容。

+0

+1。謝謝.. – user1481183