声明接口对象而不是实现类
本文关键字:实现 接口 对象 声明 | 更新日期: 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的对象。第二点使用接口可以帮助你迁移到新的类实现与最小的更改
在编码的地方,你将针对接口而不是类工作,所以如果明天你改变了具体类,你只需要在一个地方修改它,所有的代码将切换到新的类。