C#4でジェネリクスにおいても共変性という性質を持てるようになった。
ジェネリックの共変性と反変性 | Microsoft Docs
ジェネリクスの共変性・反変性 - C# によるプログラミング入門 | ++C++; // 未確認飛行 C
ITest.csというのを追加し、
// テストインターフェース interface ITest<T> // ITest<T>インターフェース { // メソッド void Set(T[] ary); // Tの配列aryをセットするSet. T[] Get(); // Tの配列を返すGet. }
こんなインターフェースで、
実装クラスTest.csはこんな感じ。
MainClass.csは、
ITest<string>がITest<object>に変換できるのかどうか。
ビルドは通るけど。
実行すると、こうなってしまう。
ここの時点でダメ。
// テストインターフェース interface ITest<out T> // ITest<T>インターフェース { // メソッド void Set(T[] ary); // Tの配列aryをセットするSet. T[] Get(); // Tの配列を返すGet. }
ということでITest.csでTの前にoutを入れてみると、
今度はビルドエラー。
まあ、共変性は取得限定なので、
メッセージとは逆にSetをコメントアウトすると、
今度は通る。
AAA BBB CCC AAA BBB CCC 続行するには何かキーを押してください . . .
意図通りにキャストできて動いた・・・。