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

本文关键字:实现 接口 对象 声明 | 更新日期: 2023-09-27 18:12:55

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

Myinterface obj=new MyImplementationClass();

为什么不直接用

 MyImplementationClass obj=new MyImplementationClass();

?

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

实现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>();

看一下什么是依赖注入

(*)除非MyOtherImplementationClass继承自MyImplementationClass

首先你不能创建Interface的对象。第二点使用接口可以帮助你迁移到新的类实现与最小的更改

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