次の継承が必要です。
public class Persistent
{
public virtual Persistent Clone() { ... }
}
public class Animal : Persistent
{
public override Animal Clone() { ... }
}
これは、ジェネリック クラスを使用して実装できます。
public class Persistent<T>
{
public virtual T Clone() { ... }
}
public class Animal : Persistent<Animal>
{
public override Animal Clone() { ... }
}
ただし、Animal からさらに継承することはできません。
public class Pet : Animal
{
public override Pet Clone() // return type is Animal
}
明らかに、これが機能するには Pet が Persistent<Pet> から派生する必要がありますが、従来の継承が必要です。残念ながら、C# は多重継承もミックスインもサポートしていません。回避策はありますか?