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

ここから撮影:

クラスまたは構造体がインターフェイスを実装する場合、クラスまたは構造体は、インターフェイスによって定義されたすべてのメンバーの実装を提供します。インターフェイス自体は、基本クラスの機能を継承できる方法でクラスまたは構造体が継承できる機能を提供しません。ただし、基本クラスがインターフェイスを実装する場合、派生クラスはその実装を継承します。派生クラスは、インターフェイスを暗黙的に実装すると言われています。

ここから撮影:

継承により、他のクラスで定義されている動作を再利用、拡張、および変更する新しいクラスを作成できます。メンバーを継承したクラスを基底クラス、そのメンバーを継承したクラスを派生クラスと呼びます。派生クラスは、直接基底クラスを 1 つだけ持つことができます。ただし、継承は推移的です。ClassC が ClassB から派生し、ClassB が ClassA から派生した場合、ClassC は ClassB および ClassA で宣言されたメンバーを継承します。

C# では、C++ などの言語とは異なり、多重継承は許可されていません。つまり、クラスは複数の他のクラスから継承できません。逆に、クラスは複数のインターフェイスを実装できます。

于 2012-08-18T16:37:13.563 に答える
5

「継承」とは、既存の動作を拡張することを意味します。インターフェイスには動作がありません。インターフェイスで定義されたメソッド/プロパティのすべての動作を実装する必要があります。したがって、インターフェイスを「実装」し、実際には何も継承できません。

他の何かから継承する場合、その具体的な動作をすべて継承します。他のクラスがインターフェースを実装している場合、そのインターフェースも実装する必要はありません。ここで、そのインターフェースを「実装」するクラスは、それらのインターフェース実装の 1 つ以上を「抽象」にすることができます。その場合、派生元のクラスの抽象メンバーを実装する必要があります。ただし、そのインターフェイスを実装する必要はありません。ベースからインターフェイスを継承します。派生型の「基本クラス リスト」にインターフェイスを含めることができますが、必須ではありません。

そのトークンによって、完全に抽象クラスも「実装」します。しかし、誰もがその用語を使用することはめったにありません。ほとんどの場合、「インターフェイス」は .NET の構文糖衣です。ただし、IL レベルのサポートはあります。たとえば、完全に抽象化された基本クラスは、意味的にはインターフェイスと同じです。

インターフェイスを使用すると、動作ではなくインターフェイスを定義することしかできなくなります (抽象クラスは動作を持つことができます)。

于 2012-08-18T16:57:45.397 に答える
1

あなたが尋ねていることに対する答えは、私が正しく理解していれば「はい」です。

最初の例では、基本クラス ( )から継承し、インターフェイス ( ') を実装しています。MonoBehaviorICentroidHitLIstener

クラスMonoBehaviorからのすべてのメンバーにアクセスできます。クラスは、インターフェイスで定義されたすべてのメンバーの実装を提供する必要があります。HitControllerHitControllerICentroidHitListener

2 番目の例では、インターフェイスのみを実装していICentroidHitListenerます。

于 2012-08-18T16:37:36.110 に答える
0

That's easy.
Inheriting is gaining base class features to yours.
Implementing is creating features according to specified protocol.

class:class and interface:interface is inheritance,
class:interface is implementing,
class:abstract_class are both implementing and inheritance.

于 2012-08-18T16:48:08.893 に答える