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

Ala*_*an2 21 c#

我有以下代码:

public class HitController : MonoBehaviour, ICentroidHitListener
Run Code Online (Sandbox Code Playgroud)

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

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

public class HitController : ICentroidHitListener
Run Code Online (Sandbox Code Playgroud)

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

Ry-*_*Ry- 27

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

因此HitController : ICentroidHitListener是正确的.


Dan*_*iel 10

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

这就是I为所有接口添加前缀很重要的原因.

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

取自这里:

当类或结构实现接口时,类或结构为接口定义的所有成员提供实现.接口本身不提供类或结构可以继承基类功能的方式继承的功能.但是,如果基类实现了接口,则派生类将继承该实现.据说派生类隐式地实现了接口.

取自这里:

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

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


Pet*_*hie 5

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

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

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

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