2个接口的通用方法

时间:2018-11-12 21:11:41

标签: c# interface

我在C#中有一个设计问题。

我有一个IAnimal接口(有一些方法)。 然后,我有一个IMammal和IReptile接口(继承了IAnimal接口)。

如果IMammal和IReptil类似乎都需要一种方法,该怎么办?

我不能将这种方法放在IAnimal界面中,因为它只涉及IMammal和IReptile(而没有其他动物),但是我没有两次定义此方法(听起来不是很好的习惯)。

3 个答案:

答案 0 :(得分:2)

您所谈论的主要是接口隔离,因此,您可以定义一个单独的接口,而只有IMammalIReptil可以实现,继承自。

或者,您也可以throw NotImplementedException()处理其他与行为无关的类型。

答案 1 :(得分:0)

您有两个选择:

  1. IMammalIReptile都实现了IMammalReptile,后者实现了IAnimal。您在接口层次结构中创建一个附加级别。考虑到IMammal IMammalReptile
  2. 的关系时,这很有意义
  3. 您将创建定义所需行为的第三个接口,并使IMammalIReptileIAnimal一起实现。当您按照IMammal 行为类似的方式考虑这种关系时,这是很有意义的。

在给定示例的特定情况下,选项2似乎可行。

答案 2 :(得分:0)

您可以创建IMammalIReptile都实现的公共接口。但是实际上,我们不太可能编写处理所有这些嵌套类型的代码。它还可以将您粉刷到角落。某些东西将需要哺乳动物和爬行动物使用的通用方法,但它与某些较低级别的界面不兼容。

相反,请尝试创建诸如IMoveBehaviorIEatBehaviorIReproduceBehavior之类的界面,并将各种行为放在自己的类中。

这样,如果您想要给定的IMoveBehavior实现,则可以在任何类型的动物中使用它,即使它与使用该行为的其他动物没有其他共同之处。

您仍然可以使用继承。也许您是根据各种行为来“组成”青蛙,而现在您需要不同类型的青蛙。它们可能有很多共同点,因此继承才有意义。但是最好从组合开始,然后看看是否出现了继承对我们有利的模式。如果我们从继承开始,那往往会使我们绊倒。