[英]Override Generic Method With Concrete Type (type parameter * hides class *)
我想在派生類中重寫泛型方法。 我要抓住的是這樣一個具體的類型參數實現:
namespace Stumped
{
public class Generic<T> where T : new()
{
public virtual T Foo()
{
return new T();
}
public virtual TAnother GenericMethod<TAnother>() where TAnother : new()
{
return new TAnother();
}
}
public class Concrete : Generic<Inner1>
{
// Concrete return type. Works as expected.
public override Inner1 Foo()
{
return base.Foo();
}
// Why doesn't this make sense? Shows 'Type parameter "Inner2" hides class "Inner2"'.
public override Inner2 GenericMethod<Inner2>()
{
return base.GenericMethod<Inner2>();
}
}
public class Inner1 { }
public class Inner2 { }
}
如前所述,編譯器告訴我:
類型參數“內部”隱藏類“內部”
我希望我的實現能夠正常工作,而不必在此派生類中使用另一個通用參數。
為什么這沒有道理?
你根本做不到。
覆蓋方法不能更改方法界面的任何部分。 由於GenericMethod<OtherClass>()
對基類有效,因此它對派生類也必須有效。
這稱為Liskov替代原理 。
當編譯器警告您時,您實際上只是聲明了一個普通類型參數,該參數恰好與您的類具有相同的名稱。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.