Csharp/C#教程:如何访问generics类型的静态方法分享


如何访问generics类型的静态方法

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

是否有正确的面向对象的方法来实现这一点,还是我需要求助于反思?

编辑:我试图过于简单化这个问题,并且遗漏了一个重点。 MyStaticMethod使用reflection并需要派生类型来返回正确的结果。 但是,我刚刚意识到我设计中的另一个缺陷是我无法使用静态虚拟方法,我认为这就是我需要的。

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

你无法像这样引用静态成员的原因:

 O.MyStaticMethod(); 

是因为你不知道O是什么类型。 是的,它inheritance自BusinessObject,但静态成员不在类型之间inheritance,因此您只能从BusinessObject引用MyStaticMethod。

即使它被约束为类型,也无法通过generics类型参数访问静态方法。 只需直接使用约束类

 var s = BusinessObject.MyStaticMethod(); 

注意:如果您希望基于实例化的O类型调用静态方法,那么在没有reflection的情况下这是不可能的。 .Net中的generics在编译时静态绑定到方法(与在实例化时绑定的C ++不同)。 由于无法静态绑定到实例化类型上的静态方法,因此这是不可能的。 虚方法有点不同,因为您可以静态绑定到虚方法,然后让动态调度在实例化类型上调用正确的方法。

如果您强制OBusinessObjectinheritance,为什么不这样调用它:

上述就是C#学习教程:如何访问generics类型的静态方法分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

 void SomeMethod() { var s = BusinessObject.MyStaticMethod(); // <- How to do this? } 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/984767.html

(0)
上一篇 2021年12月20日
下一篇 2021年12月20日

精彩推荐