我想要一个方法存在于子类中但具有不同的返回类型。请查看下面的代码,了解我要做的事情。有没有办法实现这一点,任何人都知道?
public abstract class MyParent
{
public abstract T GetStatus();
}
public class MyChild : MyParent
{
public override StatusEnum GetStatus()
{
// Do Stuff
}
}
答案 0 :(得分:3)
public abstract class MyParent<T>
where T : struct, IConvertible
{
public void EnsureTypeIsEnum()
{
if(!typeof(T).IsEnum)
throw new Exception("T must be an enum");
}
public abstract T GetStatus();
}
public class MyChild : MyParent<StatusEnum>
{
public override StatusEnum GetStatus()
{
// Do Stuff
}
}
T : struct
是a type constraint,它阻止您使用课程。由于没有Enum约束,因此您应该使用它(您也可以添加IConvertible
,以便稍微限制Enum类型。)
如果你真的需要检查T是否是枚举,那么你可以在运行时检查它(我在答案中添加了EnsureTypeIsEnum方法)
答案 1 :(得分:0)
您要查找的关键字应该是“new”关键字,在vb.net中称为“阴影”:
public new StatusEnum GetStatus()
答案 2 :(得分:0)
您可以对子类中的方法使用override,或者让该方法隐式返回泛型对象,并在子类中转换/转换返回的对象(如果您知道要返回的内容)。