C# の汎用オープン型リストの初期化エラー: 解決策
Data<T>
やその閉じられた構築型 (StringData
、DecimalData
など) のようなジェネリックなオープン型を扱う場合、List<Data>
を使用してリストを作成しようとすると、コンパイラ エラーが発生します。「ジェネリック型の使用」 「データ」には 1 つの型引数が必要です。」 これは、C# がオープン ジェネリック型のダイヤモンド演算子をサポートしていないためです。具体的な型の引数は常に必要です。
問題の説明
コンパイラはリストを作成するために、Data<T>
クラス内の特定の型を知る必要があります。 List<Data>
は曖昧です。 T
がどのような型を表すかは指定されていません。
効果的な解決策
これを解決するための 2 つの実際的なアプローチを次に示します。
インターフェースの実装: IData
とその派生型が実装するインターフェース (例: Data<T>
) を作成します。 次に、リストを List<IData>
として宣言します。これはポリモーフィズムを活用しており、異なる Data<T>
型のインスタンスを同じリストに格納できるようになります。
抽象基本クラス: DataBase
の抽象基本クラス (例: Data<T>
) を定義します。 この基本クラスから具象型を派生させます。 その後、List<DataBase>
のリストを作成できます。 これにより、強力な型指定が提供されますが、インターフェイスのアプローチと比較して汎用性が低くなります。
考慮事項
どちらの方法でも、設計がある程度複雑になります。 どちらを選択するかは、アプリケーションの特定のニーズによって異なります。 インターフェイスはより優れた柔軟性を提供し、抽象基本クラスはより構造化されたアプローチを提供します。
続きを読む
C# のジェネリックス、バリアンス、ポリモーフィズムについて詳しくは、次のリソースを参照してください。
以上がC# の汎用オープン型でリストの初期化が失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。