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

4

2 回答 2

9

第二个很可怕。它真的相当于

IMyInterface inst = new MyClass();

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

通常,如果您只依赖接口类型(根据上述或第三个选项)声明变量会更干净 - 它让用户清楚您不需要类声明的任何额外成员. 请参阅“对接口进行编程意味着什么?” 了解更多信息。

请注意,这些都与实现接口无关。MyClass实现接口的类。这仅与使用接口的实现有关。

于 2012-10-09T16:50:31.543 回答
5

MyClass inst = new MyClass();

它使用具体类型创建一个对象。多态性是无法实现的。

var inst = new MyClass() as IMyInterface

编译器能够根据强制转换和使用 var 推断它是哪种类型。类型是 IMyInterface...

IMyInterface inst = new MyClass();

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

于 2012-10-09T16:50:40.793 回答