[英]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.