gpt4 book ai didi

c# - 为什么我在模板中使用静态方法得到 CS0119?

转载 作者:行者123 更新时间:2023-11-30 13:37:46 24 4
gpt4 key购买 nike

为什么这个(人为的)示例给出“错误 CS0119:‘T’是‘类型参数’,在此上下文中无效”。我肯定已经告诉它类型会有合适的方法吗?

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

class Bar
{
public bool CanIt<T>() where T : Foo
{
return T.IsIt();
}
}

实际的激励示例是在模板参数中涉及 CRTP 的更复杂的东西,但这说明了问题。

最佳答案

C# 编译器不支持调用类型参数之外的静态方法。

请注意,在此处执行此操作没有任何值(value)。编译 CanIt 时必须发出对 IsIt 的调用。 virtual dispatch方式无法调用静态方法只能通过直接引用类型+方法来调用静态方法。因此,编译器在这里唯一可以做的就是发出对 Foo::IsIt 的调用。那么为什么不直接调用 Foo::IsIt 呢?

关于c# - 为什么我在模板中使用静态方法得到 CS0119?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21022578/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com