27

我有以下代码:

public class HitController : MonoBehaviour, ICentroidHitListener

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

但是,如果我只想实现 ICentroidListener 中的方法,我该如何编写代码呢?我是这样编码的吗:

public class HitController : ICentroidHitListener

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

4

5 回答 5

35

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

因此HitController : ICentroidHitListener是正确的。

于 2012-08-18T16:36:49.090 回答
12

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

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

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

取自这里

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

取自这里

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

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

于 2012-08-18T16:37:13.563 回答
5

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

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

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

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

于 2012-08-18T16:57:45.397 回答
1

如果我理解正确,您所问的答案是“是”。

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

您可以访问类中的所有成员,并且您的MonoBehavior类必须为接口中定义的所有成员提供实现。HitControllerHitControllerICentroidHitListener

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

于 2012-08-18T16:37:36.110 回答
0

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

class:class 和 interface:interface 是继承,
class:interface 是实现,
class:abstract_class 既是实现又是继承。

于 2012-08-18T16:48:08.893 回答