【发布时间】:2016-06-02 19:10:48
【问题描述】:
我想覆盖派生类中的泛型方法。问题是我想要一个具体的类型参数实现:
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 { }
}
如前所述,编译器告诉我:
类型参数“Inner”隐藏类“Inner”
我希望我的实现能够正常工作,而不必在这个派生类中使用另一个泛型参数。
为什么这没有意义?
【问题讨论】:
-
我的编译器没有显示任何东西。
-
可能是更清晰的事情。尽管如此,该消息是有效的。如果我要尝试在覆盖的 GenericMethod 中访问 Inner2 的属性,它会告诉我该属性没有定义(因为显然我隐藏了该类)。
标签: c# generics inheritance type-parameter