通用标签

有什么想法可以使这项工作有效,以便对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是其自身的类型参数。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top