考慮下面的類中使用抽象方法:與強類型的返回類型
public abstract class Animal
{
public abstract Animal GiveBirth();
}
public class Monkey : Animal
{
public override Animal GiveBirth()
{
return new Monkey();
}
}
public class Snake : Animal
{
public override Animal GiveBirth()
{
return new Snake();
}
}
//That one doesnt makes sense.
public class WeirdHuman: Animal
{
public override Animal GiveBirth()
{
return new Monkey();
}
}
我在尋找一種方式來執行的返回類型的overrided GiveBirth
方法,使其始終返回實際類的類型,從而使沒有WeirdHuman
可以生出Monkey
。
我覺得答案是關於泛型類型,但我看不出我該怎麼做。
爲例預期的結果:
public abstract class Animal
{
public abstract /*here a way to specify concrete type*/ GiveBirth();
}
public class Monkey : Animal
{
public override Monkey GiveBirth() //Must returns an actual Monkey
{
return new Monkey();
}
}
「絕對不可能」 可以一個答案,如果解釋清楚。
這就是我的想法。我看不到任何方式來指定泛型類型必須實現實際的類類型。就像'在哪T:這個'或什麼...... – Johnny5 2013-04-23 14:40:39
支持它的語言是什麼? – Johnny5 2013-04-23 14:41:19
Java支持它。由於CLR是潛在的問題,.NET沒有任何支持。希望未來的版本能夠增加支持,但據我瞭解,它將需要大幅度的改變才能實現。 – 2013-04-23 14:44:13