c#静态构造函数不从派生类调用classBus{staticBus(){foreach(FieldInfofiintypeof(T).GetFields()){if(fi.FieldType==typeof(Argument)){fi.SetValue(typeof(T),newArgument("busyname","busyvalue"));}}}}classBuss:Bus{publicstaticArgumentfield;任何想法如何使它工作以便对Buss中的静态字段的引用触发Buss中的静态构造函数?这对您来说很重要,这可能意味着您在使用静态构造函数时做错了。考虑到这一点,您可以在Buss中创建静态构造函数并手动调用Buss的静态构造函数。请注意,不可能多次运行静态构造函数。MSDN说“静态构造函数不是继承的”。我想这类似于静态字段,它们也不是继承的。引用类型时,每个类型仅调用一次类型的静态构造函数。调用Bussx=newBuss()将调用Buss的静态构造函数。调用Busx=newBus()也会调用Bus的静态构造函数,但会为其类型参数Buss设置Buss.field。如果你创建一个Bugs:Bus类,它永远不会设置Bugs.field,因为它会首先解析类型参数Buss,它调用它的基类Bus的静态构造函数,后者设置Buss.field。当它尝试调用Bugs基类的静态构造函数时,它认为它已经调用了静态Bus构造函数并跳过它。基本上如果我复制粘贴你的代码,创建一个虚拟的Argument类并创建一个新的Buss实例,调用静态构造函数并将Buss.field设置为Argument的一个实例,但我确实认识到一些奇怪的行为,我必须建议不要使用静态方法的反射来实现子类的静态。您提供的示例之所以有效,是因为Buss本身就是一个类型参数。以上就是C#学习教程的全部内容:c#静态构造函数不是从派生类调用的。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处:
