C#如何从同一个虚函数中返回不同的类型

时间:2017-06-25 20:28:59

标签: c# oop virtual-functions

我想知道如何使用不同的实现从相同的虚函数返回不同的类型。 例如,一个实现将返回int,另一个实现将返回List。

谢谢:)

2 个答案:

答案 0 :(得分:3)

正如我在你的问题的评论中所提到的,你可以用泛型来做到这一点:

public class MyBaseClass<T>
{
    public virtual T MyMethod()
    {
        return default(T);
    }
}

public class MyIntClass : MyBaseClass<int>
{
    public override int MyMethod()
    {
        return 1;
    }
}

public class MyListClass : MyBaseClass<List<int>>
{
    public override List<int> MyMethod()
    {
        return new List<int>();
    }
}

答案 1 :(得分:0)

这实际上取决于您真正想要实现的目标,并且可能有更好或更多的方法来实现您的最终目标。

但是,要回答您的问题,您可以将虚拟方法的返回类型声明为对象,并将重写方法中的框值声明为对象或使用泛型。

使用对象:

~^([^?#]*?sheet/)pub(.*)(&[a-z=]*)$~
   ^^^^^^

副作用是您需要取消结果。

实现此结果的更好方法是使用泛型并保持所有强类型,这样您就不需要取消显示结果。

public class MyBaseClass
{
    public virtual object MyMethod() { return null; }
}
public class MyIntClass : MyBaseClass
{
    public override object MyMethod() { return (object)1; }
}

public class MyListClass : MyBaseClass
{
    public override object MyMethod() { return (object)new List<string>(); }
}