課題は、同じリスト内にさまざまな型パラメーターを持つ複数のジェネリック型を保持できる C# リストを作成することにあります。 値の型に制約された Metadata<T>
クラスを考えてみましょう。目標は、Metadata<int>
、Metadata<bool>
、および Metadata<double>
オブジェクトを同時に保存できるリストを作成することです。
Metadata<T>
は単一の具象型でなければならないため、T
のリストを直接使用することはできません。 ただし、継承を使用したソリューションは実用的なアプローチを提供します。
継承を使用した解決策:
このアプローチでは、抽象基本クラス Metadata
を導入し、そこから Metadata<T>
のような特殊なクラスを派生させます。
<code class="language-csharp">public abstract class Metadata { } public class Metadata<T> : Metadata where T : struct { private T mDataType; // ... other members ... }</code>
これで、抽象基本クラス Metadata
のリストを作成できます。
<code class="language-csharp">List<Metadata> metadataObjects = new List<Metadata>();</code>
このリストには、さまざまな Metadata<T>
タイプのインスタンスを含めることができるようになりました:
<code class="language-csharp">metadataObjects.Add(new Metadata<int>()); metadataObjects.Add(new Metadata<bool>()); metadataObjects.Add(new Metadata<double>());</code>
これは、継承による型固有の実装を可能にしながら、リストに共通の型 (Metadata
) を提供することで問題をエレガントに解決します。 各オブジェクト内の特定の T
にアクセスするには、適切な Metadata<T>
型にキャストバックする必要があります。 これは、C# でポリモーフィズムとジェネリック型を扱うときによくあるパターンです。
以上がC# リストは、異なる型パラメーターを持つ複数のジェネリック型を保持できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。