父类中的通用方法

时间:2015-03-03 16:14:50

标签: c# .net

我想要一个方法存在于子类中但具有不同的返回类型。请查看下面的代码,了解我要做的事情。有没有办法实现这一点,任何人都知道?

public abstract class MyParent
{
    public abstract T GetStatus();
}

public class MyChild : MyParent
{
    public override StatusEnum GetStatus()
    {
     // Do Stuff
    }
}

3 个答案:

答案 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 : structa type constraint,它阻止您使用课程。由于没有Enum约束,因此您应该使用它(您也可以添加IConvertible,以便稍微限制Enum类型。)

如果你真的需要检查T是否是枚举,那么你可以在运行时检查它(我在答案中添加了EnsureTypeIsEnum方法)

答案 1 :(得分:0)

您要查找的关键字应该是“new”关键字,在vb.net中称为“阴影”:

public new StatusEnum GetStatus()

查看https://social.msdn.microsoft.com/Forums/vstudio/en-US/b72ac99f-fd4d-4594-ae1e-813b7f3fae40/vbnet-shadows-keyword-analog-in-c

答案 2 :(得分:0)

您可以对子类中的方法使用override,或者让该方法隐式返回泛型对象,并在子类中转换/转换返回的对象(如果您知道要返回的内容)。