我找到了这个代码,它创建了一个实现类的对象,并将它分配给接口类变量:
Myinterface obj=new MyImplementationClass();
为什么我们不使用
MyImplementationClass obj=new MyImplementationClass();
答案 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类,你只需要在一个地方修改它,所有代码都将切换到新类。