考虑以下类:
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();
}
}
我正在寻找一种方法来强制执行被覆盖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();
}
}
如果解释清楚,“绝对不可能”可能是一个答案。