私は単にこのよう子/親の継承/鋳造とジェネリックタイプ
abstract class Base
{
}
class Inherited : Base
{
}
基底クラスと継承されたクラスを定義した場合、私はエラーなしBase a = new Inherited();
を自由に使用できています。
しかし、私は以下のコードを参照例えば汎用の持つ複雑な基底クラス、持っている場合:
abstract class AnotherBase<TDetailType> where TDetailType : AnotherDetail
{
public List<TDetailType> Children { get; set; }
}
abstract class AnotherDetail
{
}
をそして、私はクラス
class AnotherInherited : AnotherBase<AnotherInheritedDetail>
{
}
class AnotherInheritedDetail : AnotherDetail
{
}
を継承しているもちろん、私は、任意のより多くの同様の構文を使用することができませんでしたAnotherBase<AnotherDetail> b = new AnotherInherited();
コンパイラがエラーメッセージを表示するため、
重大度コード説明\ tempに\ ConsoleApplication3 \ ConsoleApplication3 \ Program.csを15アクティブ
方法をどれ提案:ptionプロジェクトファイル行抑制状態 エラーCS0029は、暗黙のうちに 'ConsoleApplication3.AnotherBase' ConsoleApplication3 cに 'ConsoleApplication3.AnotherInherited' タイプ を変換できません。このような状況下で継承クラスを表すためにベースクラスを使用することはできますか?
でも、 'AnotherBase b = new AnotherInherited()'を使用することができます。 –
@JonSkeet、trueこのようにすることができます。しかし、もし私がより継承したクラスを持っていれば、 'b'変数の同じ定義を使用してそれらを扱う機会はありません。 – hardywang
あなたはどのように期待しますか? 'b.Children'のタイプは何でしょうか? –