7

.NET でジェネリック コントロールを作成しているとします。例えば木。人々がこのジェネリック型定義を使用する理由がわかりません

Control<T>

オブジェクト指向プログラミングでは、抽象クラスまたはインターフェイスを使用できます。

Control<IItem> or Control<BaseClass>

したがって、唯一のことは、それらの型がその基本クラスから派生するか、インターフェイスを実装する必要があるということです。何も実装または継承する必要がないため、ジェネリック型の方が便利であるということですか?

4

2 に答える 2

19

少し混乱していると思います。ジェネリック型と抽象クラス/インターフェイスは、アプリケーション設計のさまざまなアプローチに対してさまざまな目的を果たします。抽象クラス/インターフェースは、エンティティのグループの共通機能を一般化するためのものです。後で、この API は別の方法で実装される可能性がありますが、ポリモーフィズムが関係しているため、誰にも影響はありません。

一方、何かの実装が非常に似ていて、操作しているオブジェクトのタイプだけが異なる場合もあります。ここではジェネリックが必要です。ポリモーフィズムを使用できますが、その必要はありません。そのためには、インターフェイスを定義し、実装を作成し、使用するオブジェクトの種類をエンド ユーザーに決定させる方がはるかに明確です。

最良の例はリストです。リストの主な目的は要素を格納することです。List の実装者は、使用するオブジェクトのタイプを気にする必要はないため、後で List を定義して整数リストを利用できるようになります。

于 2009-07-08T09:19:54.967 に答える
3

ツリーコントロールの場合、一般的なツリーコントロールを定義すると、ツリーアイテムは任意のタイプにすることができます(特定の制約を追加することもできます)。

コントロールをインスタンス化するときは、もちろん、アイテムタイプを宣言する必要があります(2番目のコード例のようにIItemBaseClass)。

ツリーコントロールがジェネリック型でない場合は、アイテムタイプごとに複数のコントロールを作成する必要があります。

なぜinterface/abstractBaseタイプを使用しないのですか?
インターフェース/抽象をItem具象クラスとして使用するだけの場合、その定義によって制約されます。あなたはそれのプロパティとメソッドだけを見るでしょう。ジェネリックツリーコントロールと任意のアイテムタイプを使用すると、インターフェイスの実装や親クラスの継承に関係なく、すべてのアイテムのプロパティとメソッドにアクセスできます...

于 2009-07-08T09:12:19.927 に答える