将接口声明为类成员有什么用?

本文关键字:什么 成员 接口 声明 | 更新日期: 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年丰田普锐斯掀背车"就是一个具体的类别。有可能拥有或驾驶上述任何一种。另一方面,人们不会购买"车辆"——人们会购买特定类型的车辆。在现实生活中,一个人可能会假设要求别人给他买一辆车,而不指定具体的类型,但在大多数编程语言中,这种情况下的编译器会想知道是哪种类型。

实际创建对象的代码必须知道它正在创建的对象的类型,但在许多情况下,代码将被提供由其他代码创建的对象。使用抽象类或接口来指定它期望从其他代码中得到什么的代码,将可用于其他代码创建派生自该抽象类或实现该接口的任何类。