我希望这样做,但是在C#中似乎是非法的:
public Collection MethodThatFetchesSomething<T>() where T : SomeBaseClass { return T.StaticMethodOnSomeBaseClassThatReturnsCollection(); }
我收到一个编译时错误:“’T’是一个’类型参数’,在给定的上下文中无效。”
给定通用类型参数,如何在通用类上调用静态方法?给定约束,静态方法必须可用。
在这种情况下,您应该直接在约束类型上调用static方法。C#(和CLR)不支持虚拟静态方法。所以:
T.StaticMethodOnSomeBaseClassThatReturnsCollection
…没有什么不同:
SomeBaseClass.StaticMethodOnSomeBaseClassThatReturnsCollection
通过泛型类型参数是不需要的间接寻址,因此不受支持。