Declaring object of interface instead of implementation class
我找到了这个代码,它创建了一个实现类的对象,并将其分配给接口类变量:
1
| Myinterface obj =new MyImplementationClass (); |
为什么我们不直接用
1
| MyImplementationClass obj =new MyImplementationClass (); |
?
- 你对接口了解多少?听起来你最好读一下他们的介绍。
- @Noobobb好吧,这有点像真的-如果您添加一些COM属性(声明默认的具体类型),编译器会允许您这样做:p
- 我猜,它有助于多态性,在多态性中,我们可以保存不同子类的对象,并为每个类决定运行时的行为。如果我错了,你可以纠正我
- @MarcGravell在我看到你的回复之前删除了我的评论,但我不知道。谢谢你的信息…和尊重:
- 我很好奇谁会得到公认的答案:)
- 大家好,我已经更新了我的问题,从答案中,我得到的是,如果只有一个实现类,我可以简单地使用MyImplementationClass obj=new MyImplementationClass();。
- @sharun如果只有一个实现类,为什么有接口?
- @Noobobb:我今天没有投票了,否则我会把票都投了。:)明天就可以了:)。谢谢大家。
- @MarcGravell:那我们就不需要接口了。……)谢谢您。。
- @MarcGravell"var"关键字在哪里适合所有这些?
首先,您不能创建接口的对象。第二点:使用接口帮助您迁移到新的类实现,只需最少的更改。
在编码的地方,你将使用接口而不是类,所以如果明天你改变了具体的类,你只需要在一个地方修改它,所有的代码将切换到新的类。
可能有多个类实现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。
- 非常感谢你给出如此明确的答案。接受和+1。
- 没问题,好好学习吧!