ホームページ >バックエンド開発 >C++ >C# の汎用オープン型でリストの初期化が失敗するのはなぜですか?

C# の汎用オープン型でリストの初期化が失敗するのはなぜですか?

DDD
DDDオリジナル
2025-01-11 06:00:42280ブラウズ

Why Does List Initialization Fail with a Generic Open Type in C#?

C# の汎用オープン型リストの初期化エラー: 解決策

Data<T> やその閉じられた構築型 (StringDataDecimalData など) のようなジェネリックなオープン型を扱う場合、List<Data> を使用してリストを作成しようとすると、コンパイラ エラーが発生します。「ジェネリック型の使用」 「データ」には 1 つの型引数が必要です。」 これは、C# がオープン ジェネリック型のダイヤモンド演算子をサポートしていないためです。具体的な型の引数は常に必要です。

問題の説明

コンパイラはリストを作成するために、Data<T> クラス内の特定の型を知る必要があります。 List<Data> は曖昧です。 T がどのような型を表すかは指定されていません。

効果的な解決策

これを解決するための 2 つの実際的なアプローチを次に示します。

  1. インターフェースの実装: IData とその派生型が実装するインターフェース (例: Data<T>) を作成します。 次に、リストを List<IData> として宣言します。これはポリモーフィズムを活用しており、異なる Data<T> 型のインスタンスを同じリストに格納できるようになります。

  2. 抽象基本クラス: DataBase の抽象基本クラス (例: Data<T>) を定義します。 この基本クラスから具象型を派生させます。 その後、List<DataBase> のリストを作成できます。 これにより、強力な型指定が提供されますが、インターフェイスのアプローチと比較して汎用性が低くなります。

考慮事項

どちらの方法でも、設計がある程度複雑になります。 どちらを選択するかは、アプリケーションの特定のニーズによって異なります。 インターフェイスはより優れた柔軟性を提供し、抽象基本クラスはより構造化されたアプローチを提供します。

続きを読む

C# のジェネリックス、バリアンス、ポリモーフィズムについて詳しくは、次のリソースを参照してください。

以上がC# の汎用オープン型でリストの初期化が失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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