gpt4 book ai didi

c# - 如何访问泛型类型的静态方法

转载 作者:可可西里 更新时间:2023-11-01 08:41:34 25 4
gpt4 key购买 nike

public class BusinessObjects<O>
where O : BusinessObject
{
void SomeMethod()
{
var s = O.MyStaticMethod(); // <- How to do this?
}
}

public class BusinessObject
{
public static string MyStaticMethod()
{
return "blah";
}
}

是否有正确的面向对象方法来完成此操作,或者我是否需要诉诸反射?

编辑:对于这个问题,我试图过分简化这个问题,但遗漏了一个重要的观点。 MyStaticMethod 使用反射并需要派生类型来返回正确的结果。然而,我刚刚意识到我的设计中的另一个缺陷,即我不能拥有静态虚拟方法,我认为这就是我所需要的。

看来我需要找到另一种方法来解决这个问题。

最佳答案

您不能通过泛型类型参数访问静态方法,即使它被限制为一个类型。直接使用约束类就可以了

var s = BusinessObject.MyStaticMethod();

注意:如果您希望根据 O 的实例化类型调用静态方法,没有反射是不可能的。 .Net 中的泛型在编译时静态绑定(bind)到方法(不像 C++ 在实例化时绑定(bind))。由于无法静态绑定(bind)到实例化类型上的静态方法,因此这是不可能的。虚方法有点不同,因为您可以静态绑定(bind)到虚方法,然后让动态分派(dispatch)在实例化类型上调用正确的方法。

关于c# - 如何访问泛型类型的静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9146533/

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