C# でオープン ジェネリック型 (クラス
プログラミングでは、コレクション内の複数の種類のデータを処理する必要があるシナリオに遭遇することがあります。この場合、ジェネリック医薬品は柔軟なソリューションを提供できます。ただし、List などのオープン ジェネリック型を使用すると、コンパイラ エラーが発生することがあります。
StringData や DecimalData など、さまざまな種類のデータを表すクラス Data
<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
代替方法
さまざまなタイプのオブジェクトを含むコレクションを維持する必要がある場合は、次の代替案を検討できます:
以上がC# でオープン ジェネリック型 (クラス) のリストを作成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。