考虑下面的类中使用抽象方法:与强类型的返回类型
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