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

时间:2011-10-31 13:02:05

标签: c# interface

我真的不明白发生了什么以及将类成员声明为接口的用途是什么。 MSDN说接口无法实例化,所以你不能说:

    IMovable i = new IMovable(); 

你无法做到这一点的原因非常简单。但是宣告的用途是什么,例如:

  protected static IMovable i;

在这种情况下,我代表什么?有什么用?

由于

7 个答案:

答案 0 :(得分:3)

因为您将编写代码,以便它可以使用 IMovable的任何实现,而不仅仅是那个。

这允许您构建loosely coupled代码。

答案 1 :(得分:2)

您希望存储对实现该接口的对象的引用,但您不关心它是什么类型的对象,只是它实现了该接口。

答案 2 :(得分:2)

成员i可以表示实现IMovable的任何对象,这就是它有用的原因。您可以将不同的对象分配给i,并根据对象具有特定的行为。

答案 3 :(得分:1)

接口成员将被分配到 实例 某人 - DI框架或自定义代码。否则,是的,没有意义。

答案 4 :(得分:1)

接口是一种抽象(契约),无法实例化。但是如果你在课堂上实施了你的,那么你的:

interface IMovable {
  void DoStuff();
}

class ImplementinIMovableClass : IMovable {
  void DoStuff() { .. }
}

protected static IMovable i = new ImplementinIMovableClass();

变量i仅在该接口中定义了属性/方法。在这种情况下,它是方法DoStuff();

使用Interface方法,您可以考虑使用 DependencyInjection 来减少代码伪装。

答案 5 :(得分:1)

正如许多其他答案已经指出的那样,i成员变量可以指向IMovable的任何实现。

这不仅在灵活性方面有很大好处,而且是实现Polymorphism的OO原则的一种方式。

托马斯

答案 6 :(得分:0)

接口和抽象类非常相似,尽管在现实世界中抽象类可能更容易理解。

像“车辆”这样的东西将是一个抽象的类;像“2010丰田普锐斯两厢车”这样的东西将是一个具体的课程。可以拥有或驱动上述任何一种。另一方面,人们不会购买这样的“车辆” - 人们会购买特定类型的车辆。在现实生活中,一个人可能会假设某人给他买车,而没有指明任何特定的类型,但在大多数编程语言中,编译器在这种情况下会想知道什么样的。

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