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

时间:2012-10-09 16:47:34

标签: c# interface var

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实现的正确方法是什么?

2 个答案:

答案 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指向的位置。