我想知道如何使用不同的实现从相同的虚函数返回不同的类型。 例如,一个实现将返回int,另一个实现将返回List。
谢谢:)
答案 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>(); }
}