public interface IMyInterface
{
List<string> MyList(string s)
}
public class MyClass : IMyInterface
{
public List<string> MyList(string s)
}
有什么区别:
[Method]
MyClass inst = new MyClass();
...
或者:
[Method]
var inst = new MyClass() as IMyInterface;
...
或者:
[Method]
IMyInterface inst = new MyClass();
...
使用IMyInterface实现的正确方法是什么?
答案 0 :(得分:9)
第二个是可怕的。它真的相当于
IMyInterface inst = new MyClass();
但它甚至没有检查MyClass
是否实现了接口。这只是一种使用var
但在其他地方明确指定类型的方法。 ICK。
一般来说,使用接口类型声明变量更清晰(如上所述,或者第三个选项),如果这就是你所依赖的 - 它使用户明白你不需要任何额外的成员声明在课堂上。有关详细信息,请参阅"What does it mean to program to an interface?"。
请注意,这些都与实现接口无关。 MyClass
是实现接口的类。这与使用接口的实现有关。
答案 1 :(得分:5)
MyClass inst = new MyClass();
它使用具体类型创建一个对象。多态性无法实现。
var inst = new MyClass() as IMyInterface
编译器能够根据强制转换和使用var推断出它的类型。类型是IMyInterface ...
IMyInterface inst = new MyClass();
我认为最好的。通过使用MyInterface,您可以实现多态,在运行时更改inst指向的位置。