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的实现的正确方法是什么?
第二个是可怕的.它真的相当于
IMyInterface inst = new MyClass();
Run Code Online (Sandbox Code Playgroud)
但它甚至没有检查是否MyClass实现了接口.它只是一种使用方式,var但在其他地方明确指定类型.伊克.
一般来说,使用接口类型声明变量更清晰(如上所述,或者第三个选项),如果这是您所依赖的 - 它使用户清楚地知道您不需要该类声明的任何额外成员.请参阅"对接口进行编程意味着什么?" 欲获得更多信息.
请注意,这与实现接口无关.MyClass是实现接口的类.这与使用接口的实现有关.
MyClass inst = new MyClass();
它使用具体类型创建对象.多态性是不可实现的.
var inst = new MyClass() as IMyInterface
编译器能够根据强制转换推断它的类型.类型是IMyInterface ...
IMyInterface inst = new MyClass();
在我看来最好的.通过使用MyInterface,您可以实现多态,在运行时更改inst指向的内容.