這個問題在這里已經有了答案: 如何確保從抽象泛型類派生的類將自身用作泛型引數 1 個回答 8 天前關閉。
是否有可能父類可以強制子類實作一個方法,該方法只將同一子類的物件作為引數?
應該這樣作業:
public abstract class Animal
{
public abstract void MakeLove(Animal partner);
}
public class Dog : Animal
{
public override void MakeLove(Dog partner)
{
//...
}
}
public class Fish : Animal
{
public override void MakeLove(Fish partner)
{
//...
}
}
所以我不希望狗和魚做愛,而只和其他狗做愛......
uj5u.com熱心網友回復:
考慮制作Animal泛型。
public class Animal<T>
where T: Animal<T>
{
...
public abstract MakeLove(T partner);
...
}
public class Dog : Animal<Dog>
{
...
public override MakeLove( Dog partner)
...
}
uj5u.com熱心網友回復:
您可以使用泛型。例子:
public class Animal<T> where T : Animal<T>
{
public abstract MakeLove(T partner);
}
public class Dog : Animal<Dog>
{
public override MakeLove(Dog partner)
{
...
}
}
您也可以使用鑄造。例子:
public class Animal
{
public abstract MakeLove(Animal partner);
}
public class Dog : Animal
{
public override MakeLove(Animal partner)
{
var dogPartner = partner as Dog; // or (Dog)partner;
...
}
}
但我不建議鑄造;它不保證partner引數是一個Dog型別。
還有,BreedWith(Animal otherAnimal)比較合適。大多數動物不會“做愛”。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/385066.html
上一篇:使用具有多重繼承的super()
