关于c#:声明接口的对象而不是实现类


Declaring object of interface instead of implementation class

本问题已经有最佳答案,请猛点这里访问。

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

1
Myinterface obj=new MyImplementationClass();

为什么我们不直接用

1
 MyImplementationClass obj=new MyImplementationClass();


首先,您不能创建接口的对象。第二点:使用接口帮助您迁移到新的类实现,只需最少的更改。

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


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

1
MyInterface obj = new MyImplementationClass();

您还可以执行以下操作:

1
MyInterface obj = new MyOtherImplementationClass();

但是,如果使用具体的实现名称,则无法执行此操作(*):

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

您将无法使用以下内容:

1
MyInterface obj = new MyInterface();

因为你不知道怎么疯狂。它应该是一个MyInterfaceImplementation吗?应该是MyOtherInterfaceImplementation吗?

但是有一种技术叫做依赖注入。让我们用某种方式将特定的实现绑定到一个类型。使用它,您可以执行如下操作:

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

看看什么是依赖注入?.

(*)除非MyOtherImplementationClass继承自MyImplementationClass