考慮這兩個抽象類。 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' –