考虑这两个抽象类。 MyClass2扩展了我的BaseClass并覆盖了一个虚拟方法。请注意,它还将MyBaseClass的TValue定义为IList ...覆盖具有通用返回类型的虚拟方法
public abstract class MyBaseClass<TKey, TValue>
{
public virtual IList<TValue> DoSomeStuff()
{
IList<TValue> result;
....
return restult;
}
}
public abstract class MyClass2<TKey, TValue>: MyBaseClass<TKey, IList<TValue>>
{
public override IList<TValue> DoSomeStuff()
{
IList<TValue> result;
....
return restult;
}
}
此代码不能编译。投诉在MyClass2.DoSomeStuff的返回类型上。错误是“当覆盖方法时不能更改返回类型”IList<TValue> MyClass2<TKey, TValue>.DoSomeStuff()
“
我不清楚为什么这是错误的。为什么编译或.net认为override方法的TValue是MyClass2的?
hrmm。然后我想保持类型相同的唯一方法是“泛化”方法本身。泛型和继承似乎比较麻烦一些。 – mike01010
@ mike01010从你显示的有限代码中,如果你想让'DoSomeStuff'仍然返回'IList' –