为什么这个(人为的)示例给出了"错误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的更复杂的事情,但这显示了问题.
C#编译器不支持从类型参数调用静态方法.
请注意,这里没有任何价值.编译IsIt时必须发出调用CanIt.无法以虚拟分派方式调用静态方法静态方法只能通过直接引用类型+方法来调用.因此,编译器在这里唯一能做的就是发出调用Foo::IsIt.那么为什么不直接打电话Foo::IsIt呢?
| 归档时间: |
|
| 查看次数: |
8641 次 |
| 最近记录: |