C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 44 を表示中)
■23516 / )  Re[7]: IListとList
□投稿者/ 凪瀬 (74回)-(2008/08/18(Mon) 10:27:24)
凪瀬 さんの Web サイト
代入互換性から
IList<IList<int>> matrix = new List<List<int>>();
と出来ないのは、ここまでのスレッドの流れのとおりなのですが、ジェネリクスのこの周辺を分かりにくくしているのは、通常の変数の代入互換とルールが違うためではないかと考えています。

オブジェクト指向の考え方では子クラスは親クラスを代替え可能ですから
IList list = new List();
はキャスト演算子なしに代入可能とされます。
これは、変数型の宣言IListによって、事実上「IListを継承した何か」を代入可能なわけですが、
IList<IList<int>>
の場合、ジェネリクス型パラメータのIList<int>はIList<int>であって、「IList<int>を継承した何か」ではないんですよね。
List<IList<int>>は代入できるけど、IList<List<int>>は代入できない。

この似て非なる代入互換性がジェネリクスを分かりにくくしているように思えます。
返信 編集キー/


管理者用

- Child Tree -