C# - 如何正确使用接口的实现

use*_*183 4 c# var interface

public interface IMyInterface
{
   List<string> MyList(string s)
}

public class MyClass : IMyInterface
{
   public List<string> MyList(string s)
}
Run Code Online (Sandbox Code Playgroud)

有什么区别:

[Method]
MyClass inst = new MyClass();
...
Run Code Online (Sandbox Code Playgroud)

要么:

[Method]
var inst = new MyClass() as IMyInterface;
...
Run Code Online (Sandbox Code Playgroud)

要么:

[Method]
IMyInterface inst = new MyClass();
...
Run Code Online (Sandbox Code Playgroud)

使用IMyInterface的实现的正确方法是什么?

Jon*_*eet 9

第二个是可怕的.它真的相当于

IMyInterface inst = new MyClass();
Run Code Online (Sandbox Code Playgroud)

但它甚至没有检查是否MyClass实现了接口.它只是一种使用方式,var但在其他地方明确指定类型.伊克.

一般来说,使用接口类型声明变量更清晰(如上所述,或者第三个选项),如果这是您所依赖的 - 它使用户清楚地知道您不需要该类声明的任何额外成员.请参阅"对接口进行编程意味着什么?" 欲获得更多信息.

请注意,这与实现接口无关.MyClass实现接口的类.这与使用接口的实现有关.


Lew*_*rin 5

MyClass inst = new MyClass();

它使用具体类型创建对象.多态性是不可实现的.

var inst = new MyClass() as IMyInterface

编译器能够根据强制转换推断它的类型.类型是IMyInterface ...

IMyInterface inst = new MyClass();

在我看来最好的.通过使用MyInterface,您可以实现多态,在运行时更改inst指向的内容.