【发布时间】:2013-04-16 19:55:18
【问题描述】:
考虑以下类:
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();
}
}
“绝对不可能”可能是一个答案,如果解释清楚的话。
【问题讨论】:
标签: c# generics inheritance overriding abstract-class