ホームページ >バックエンド開発 >C++ >C# でオープン ジェネリック型 (クラス) のリストを作成する方法

C# でオープン ジェネリック型 (クラス) のリストを作成する方法

Susan Sarandon
Susan Sarandonオリジナル
2025-01-11 08:30:10200ブラウズ

How to Create a List of Open Generic Types (Class) in C#?

C# でオープン ジェネリック型 (クラス) のリストを作成する方法

プログラミングでは、コレクション内の複数の種類のデータを処理する必要があるシナリオに遭遇することがあります。この場合、ジェネリック医薬品は柔軟なソリューションを提供できます。ただし、List などのオープン ジェネリック型を使用すると、コンパイラ エラーが発生することがあります。

StringData や DecimalData など、さまざまな種類のデータを表すクラス Data があるとします。これらのさまざまなデータ型のリストを維持するには、次のように List を使用してみてください。

<code class="language-c#">List<Data> dataCollection = new List<Data>();</code>

ただし、コンパイラはジェネリック型 "Data" には型パラメーターが必要であると警告するため、このコードはコンパイルされません。これは、オープン ジェネリック型の場合、コンパイラはリストの作成時に型パラメーターを推論できないためです。

オープンジェネリック型とクローズドジェネリック型を理解する

この問題を解決するには、オープン ジェネリック型とクローズド ジェネリック型の違いを理解することが重要です。 List の場合、これはオープン ジェネリック型を表します。これは、型パラメーター T が未指定のままであることを意味します。一方、閉じたジェネリック型は、List> や List> などの型パラメーターを指定します。

閉じたジェネリック型のリストを作成します

閉じたジェネリック型のリストを作成するには、リストの構築時に型パラメーターを指定する必要があります。例:

<code class="language-c#">List<Data<string>> stringDataCollection = new List<Data<string>>();
List<Data<decimal>> decimalDataCollection = new List<Data<decimal>>();</code>

これらのリストは、それぞれ StringData と DecimalData のインスタンスを受け入れることができるようになりました。

オープンジェネリック型ポリモーフィズムの制限

残念ながら、C# には、オープン ジェネリック型の真のポリモーフィズムを実現する直接的なメカニズムはありません。つまり、List>> のようなリストを作成し、その中に Data や Data などの異なる囲み型を格納することはできません。これは C# の汎用設計の制限です。

代替方法

さまざまなタイプのオブジェクトを含むコレクションを維持する必要がある場合は、次の代替案を検討できます:

  • 非ジェネリック インターフェイスまたは抽象クラスを使用してパブリック動作を定義し、必要に応じてオブジェクトを適切な型にキャストします。
  • 動的プログラミングを使用して柔軟性を高めますが、型安全性は犠牲になります。
  • より高度なジェネリック機能を提供するサードパーティのライブラリを使用します。

以上がC# でオープン ジェネリック型 (クラス) のリストを作成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。