声明接口的对象而不是实现类

时间:2013-05-10 11:05:56

标签: c#

我找到了这个代码,它创建了一个实现类的对象,并将它分配给接口类变量:

Myinterface obj=new MyImplementationClass();

为什么我们不使用

 MyImplementationClass obj=new MyImplementationClass();

2 个答案:

答案 0 :(得分:1)

可能有多个类实现MyInterface。如果您使用:

MyInterface obj = new MyImplementationClass();

你也可以这样做:

MyInterface obj = new MyOtherImplementationClass();

但是如果使用具体的实现名称,则不能这样做(*):

// This wouldn't work:
MyImplementationClass obj = new MyOtherImplementationClass();

你将无法使用以下内容:

MyInterface obj = new MyInterface();

因为你不知道要透露什么。应该是MyInterfaceImplementation吗?它应该是MyOtherInterfaceImplementation吗?

但是有一种称为依赖注入的技术。让你以某种方式绑定特定的实现到类型。有了它,您可以执行以下操作:

MyInterface obj = dependencyInjectionContainer.Resolve<MyInterface>();

看看What is dependency injection?

(*)除非MyOtherImplementationClass继承自MyImplementationClass

答案 1 :(得分:1)

首先,您无法创建Interface的对象。使用界面的第二点可帮助您以最小的更改迁移到新的类实现

在编码的地方,你将使用接口而不是类,所以如果明天你已经改变了Concrete类,你只需要在一个地方修改它,所有代码都将切换到新类。