継承とジェネリックに問題があります。これは私の問題を示すコードです:
namespace TestApplication
{
public class MyClass<T>
{
private T field;
public MyClass(T field)
{
this.field = field;
}
}
public class MyIntClass : MyClass<int>
{
public MyIntClass(int field)
: base(field)
{
}
}
}
そして、私がこのようなことをしようとすると:
MyClass<int> sth = new MyClass<int>(10);
MyIntClass intsth = (MyIntClass) sth;
キャスト例外が発生しました: 無効なキャスト例外です。「TestApplication.MyClass`1[System.Int32]」を「TestApplication.MyIntClass」にキャストできません。
さらに、キャスト演算子を作成できません:
public static implicit operator MyIntClass(MyClass<int> myClass)
理由: 'TestApplication.MyIntClass.implicit operator TestApplication.MyIntClass(TestApplication.MyClass)': 基本クラスとの間のユーザー定義の変換は許可されていません
上記のようにキャストを作成する必要があります。基本クラスの型からキャストできない理由がわかりません。どうすればこの問題を解決できますか? 前もって感謝します。
編集
回答ありがとうございます。これで、基本クラスから派生クラスに変換できないことがわかり、ジェネリックとは何の関係もないことがわかりました。しかし、基本クラスからユーザー定義の変換を作成できないのはなぜですか? 基本クラスを返すメソッドがあります。変換方法を定義することはできますが、キャスト演算子 imho を作成する方がより良い解決策になります。