我有以下代码:
public class HitController : MonoBehaviour, ICentroidHitListener
我理解它的方式。 HitController继承自MonoBehaviour并实现ICentroidHitListener中的方法。
但是,如果我只想在ICentroidListener中实现这些方法,我怎么能编码呢?我这样编码:
public class HitController : ICentroidHitListener
在这种情况下,看起来像HitController继承自ICentroidHitListener
答案 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既是实现又是继承。