将接口声明为类成员有什么用?
本文关键字:什么 成员 接口 声明 | 更新日期: 2023-09-27 18:12:56
我真的不明白发生了什么,以及将类成员声明为接口有什么用。MSDN说接口不能被实例化,所以你不能说:
IMovable i = new IMovable();
你不能这样做的原因很简单。但是声明有什么用呢?例如:
protected static IMovable i;
在这种情况下i代表什么?这有什么用?
谢谢
因为您将编写代码,以便它可以使用任何 IMovable
的实现,而不仅仅是一个。
您想要存储对实现该接口的对象的引用,但您不关心它是什么类型的对象,只关心它实现了该接口。
成员i
可以表示实现IMovable
的任何对象,这就是为什么它很有用。您可以为i
分配不同的对象,并根据对象具有特定的行为。
该接口成员将由某人将类的实例分配给实例实现该接口 -要么是DI框架,要么是自定义代码。否则,"是"就没有意义了。
接口是一种抽象(契约),不能被实例化。但是如果你在你的类中实现你的那么你的:
interface IMovable {
void DoStuff();
}
class ImplementinIMovableClass : IMovable {
void DoStuff() { .. }
}
protected static IMovable i = new ImplementinIMovableClass();
变量i
只有在该接口中定义的属性/方法。在这种情况下,它是方法DoStuff();
对于Interface方法,您可以考虑使用DependencyInjection来减少代码耦合。
正如许多其他答案已经指出的那样,i
成员变量可以指向IMovable
的任何实现。
这不仅在灵活性方面有很大的好处,而且是实现面向对象多态原则的一种方法。
托马斯接口和抽象类非常相似,尽管抽象类在现实世界中可能更容易理解。
像"vehicle"这样的东西是一个抽象类;比如"2010年丰田普锐斯掀背车"就是一个具体的类别。有可能拥有或驾驶上述任何一种。另一方面,人们不会购买"车辆"——人们会购买特定类型的车辆。在现实生活中,一个人可能会假设要求别人给他买一辆车,而不指定具体的类型,但在大多数编程语言中,这种情况下的编译器会想知道是哪种类型。
实际创建对象的代码必须知道它正在创建的对象的类型,但在许多情况下,代码将被提供由其他代码创建的对象。使用抽象类或接口来指定它期望从其他代码中得到什么的代码,将可用于其他代码创建派生自该抽象类或实现该接口的任何类。