C#中的inherits和implements之间有什么区别

时间:2012-08-18 16:34:17

标签: c#

我有以下代码:

public class HitController : MonoBehaviour, ICentroidHitListener

我理解它的方式。 HitController继承自MonoBehaviour并实现ICentroidHitListener中的方法。

但是,如果我只想在ICentroidListener中实现这些方法,我怎么能编码呢?我这样编码:

public class HitController : ICentroidHitListener

在这种情况下,看起来像HitController继承自ICentroidHitListener

5 个答案:

答案 0 :(得分:26)

如果是接口,:实现接口。如果它是一个类,:继承自该类。

因此HitController : ICentroidHitListener是正确的。

答案 1 :(得分:9)

通常,无法使用:语法区分接口和类。

这就是为所有接口添加I前缀非常重要的原因。

您提供的代码public class HitController : ICentroidHitListener是正确的,代码的读者应该能够轻松快速地推断出它是基于I前缀的界面。

取自here

  

当类或结构实现接口时,类或结构   为所定义的所有成员提供实现   接口。接口本身不提供类的功能   或者struct可以以基类功能的方式继承   遗传。但是,如果基类实现了一个接口,那么   派生类继承了该实现。据说派生类   隐式实现接口。

取自here

  

继承使您可以创建可重用,扩展和使用的新类   修改其他类中定义的行为。这个班的   成员被继承称为基类,而类是那个   继承那些成员称为派生类。派生类   只能有一个直接基类。但是,继承是   传递。如果ClassC派生自ClassB,则派生ClassB   从ClassA开始,ClassC继承了在ClassB中声明的成员   ClassA的。

在C#中,与C ++之类的语言相反,不允许使用multiple inheritance,这意味着类不能从多个其他类继承。相反,类可以实现多个接口。

答案 2 :(得分:4)

“继承”意味着扩展现有行为。接口没有行为,您必须实现接口中定义的方法/属性的所有行为。因此,您“实现”一个接口,并且不能真正从它继承任何东西。

如果从其他东西继承,则继承其所有具体行为。如果某个其他类实现了接口,则您不必实现该接口。现在,“实现”该接口的类可以使这些接口实现中的一个或多个“抽象”;在这种情况下,您将被迫实现您从中派生出来的类的抽象成员。但是,您不必实现该接口 - 您从基础继承接口。您可以在派生类型的“基类列表”中包含该接口,但这不是必需的。

通过该标记,您还可以“实现”一个完全抽象的类。但是,很少有人会使用这个术语。在大多数情况下,“接口”是.NET中的语法糖;但它确实有IL级别的支持。例如完全抽象的基类在语义上与接口相同。

接口让您确保您唯一能做的就是定义接口而不是行为(抽象类可以有行为)。

答案 3 :(得分:1)

如果我理解正确的话,你所问的答案是肯定的。

在第一个示例中,您从基类(MonoBehavior继承实现接口(ICentroidHitLIstener')。

您可以从MonoBehavior类访问HitController的所有成员,并且您的HitController类必须为ICentroidHitListener界面中定义的所有成员提供实现。< / p>

在第二个示例中,您只实现了ICentroidHitListener接口。

答案 4 :(得分:0)

这很容易。
继承正在为您获得基类功能 实施是根据指定的协议创建功能。

类:类和接口:接口是继承,
class:接口正在实现,
class:abstract_class既是实现又是继承。