为什么我在模板中使用静态方法获取CS0119?

Pet*_*te 3 c#

为什么这个(人为的)示例给出了"错误CS0119:'T'是'类型参数',在此上下文中无效".当然我告诉它类型会有一个合适的方法吗?

abstract class Foo
{
   static public bool IsIt() {return true;}
}

class Bar
{
   public bool CanIt<T>() where T : Foo
   {
       return T.IsIt();
   }
}
Run Code Online (Sandbox Code Playgroud)

实际的激励示例是模板参数中涉及CRTP的更复杂的事情,但这显示了问题.

Jar*_*Par 8

C#编译器不支持从类型参数调用静态方法.

请注意,这里没有任何价值.编译IsIt时必须发出调用CanIt.无法以虚拟分派方式调用静态方法静态方法只能通过直接引用类型+方法来调用.因此,编译器在这里唯一能做的就是发出调用Foo::IsIt.那么为什么不直接打电话Foo::IsIt呢?