不从派生类调用c#静态构造函数
-
29-10-2019 - |
题
通用标签
有什么想法可以使这项工作有效,以便对Buss中的静态字段的引用会触发Bus中的静态构造函数?
解决方案
这对您很重要,这可能意味着您使用的静态构造函数是错误的。
考虑到这一点,您可以在Buss
中创建一个静态构造函数,以手动调用Bus
中的静态构造函数。请注意,不能多次运行一个静态构造函数。
其他提示
MSDN说静态构造函数不会被继承”。我猜这类似于也不继承的静态字段。
当引用泛型类型的静态构造函数时,该泛型类型的静态构造函数在每个泛型标签代码中仅被调用一次。
调用Type
将调用Buss x = new Buss()
的静态构造函数。
调用Bus<Buss>
也会调用Bus<Buss> x = new Bus<Buss>()
的静态构造函数,但是它会这样做,因为它是类型参数Bus<Buss>
,设置了Buss
。
如果创建一个Buss.field
,它将永远不会设置class Bugs : Bus<Buss>
,因为它将首先解析类型参数Bugs.field
,该参数将调用其基类Buss
的静态构造函数,并设置Bus<Buss>
。当它尝试调用Buss.field
基类的静态构造函数时,会认为它已经调用了静态Bugs
构造函数,并跳过了它。
基本上,如果我复制粘贴您的代码,创建一个虚拟的Bus<Buss>
类并创建一个Argument
的新实例,则调用静态构造函数 并将Buss
设置为一个实例,但我确实在这里认识到一些奇怪的行为,在这些行为中,我建议不要使用静态方法的反射来达到子类的静态。
您提供的示例仅能起作用,因为Buss.field
是其自身的类型参数。
不隶属于 StackOverflow