c#静态构造函数未从派生类调用

class Bus { static Bus() { foreach(FieldInfo fi in typeof(T).GetFields()) { if(fi.FieldType == typeof(Argument)) { fi.SetValue(typeof(T), new Argument("busyname", "busyvalue")); } } } } class Buss : Bus { public static Argument field; } 

任何想法如何使这个工作,以便在Buss中引用静态字段的引用触发总线中的静态构造函数?

这对你很重要的事实可能意味着你使用静态构造函数是错误的。

考虑到这一点,您可以在Buss中创建一个静态构造函数,手动调用Bus的静态构造函数。 请注意,不可能多次运行静态构造函数。

MSDN说 “静态构造函数不是inheritance的”。 我想这类似于静态字段,它们也没有被inheritance。

当引用该类型时,每个Type只调用一次Type的静态构造函数。

调用Buss x = new Buss()将调用Bus的静态构造函数。

调用Bus x = new Bus()也将调用Bus的静态构造函数,但它将为其类型参数Buss ,设置Buss.field

如果你创建一个class Bugs : Bus它将永远不会设置Bugs.field ,因为它将首先解析类型参数Buss ,它调用它的基类Bus的静态构造函数,设置Buss.field 。 当它试图调用Bugs基类的静态构造函数时,它会认为它已经调用了静态Bus构造函数并跳过它。

基本上如果我复制粘贴你的代码,创建一个虚拟的Argument类并创建一个新的Buss实例,调用静态构造函数并将Buss.field设置为Argument一个实例,但我确实认识到了一些奇怪的行为,我在这里d必须建议不要使用静态方法的reflection来达到子类的静态。

您提供的示例仅起作用,因为Buss是其自身的类型参数。