Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在基本静态构造函数中显式调用静态构造函数_C#_Generics_Static_Static Methods_Static Members - Fatal编程技术网

C# 在基本静态构造函数中显式调用静态构造函数

C# 在基本静态构造函数中显式调用静态构造函数,c#,generics,static,static-methods,static-members,C#,Generics,Static,Static Methods,Static Members,这个有点奇怪/复杂,更像是好奇 我正在寻找一种方法来确保基类的静态调用可以安全地使用派生类中设置的静态信息。然后我注意到C#允许我在基类静态构造函数中调用派生类静态构造函数 我的问题是:在基类静态构造函数中调用派生类静态构造函数是否安全 以下是一些示例代码: 公共抽象类枚举 其中TEnum:Enumeration//Mapping.Values.AsEnumerable().Cast(); 公共重写字符串ToString(){return Name;} } 公共密封类DerivedEnum:枚举

这个有点奇怪/复杂,更像是好奇

我正在寻找一种方法来确保基类的静态调用可以安全地使用派生类中设置的静态信息。然后我注意到C#允许我在基类静态构造函数中调用派生类静态构造函数

我的问题是:在基类静态构造函数中调用派生类静态构造函数是否安全

以下是一些示例代码:

公共抽象类枚举
其中TEnum:Enumeration//Mapping.Values.AsEnumerable().Cast();
公共重写字符串ToString(){return Name;}
}
公共密封类DerivedEnum:枚举
{
//此静态成员将自己输入基类中的静态“映射”
公共静态只读DerivedEnum A=新的DerivedEnum(“A”、“A”);
private-DerivedEnum(string-val,string-name):base(val,name){}
}
我做了几个基本的测试,它似乎没有破裂。有没有办法打破这个

这是一把小提琴,如果你需要。。。小提琴:


此外,我的代码的灵感来自。我想看看是否可以让派生类更简洁。

看起来调用
RunClassConstructor
两次会忽略第二次调用,所以这看起来并不危险。这整件事真的很糟糕。我想不出当基类在某个地方被引用时,您希望类型静态地向其基类注册自己的情况。这种“魔法”常常让人们陷入棘手的境地。拥有一个中央注册中心将更加可靠,它确保列出并注册所有类型;或者迭代程序集中的所有类型,选择要注册的类型,然后注册它们。至少注册发生在一个中心的地方。@canton7是的,不是真的想用这个。这主要是为了我自己的学习。外卖课程应该是,如果你必须调用
RuntimeHelpers.RunClassConstructor
,事情会变得非常非常糟糕。@elgonzo你会想。遗憾的是,在调用静态基函数时,派生类的静态枚举成员没有设置。这里有一个小问题:除非您对派生构造函数的使用或基构造函数调用进行注释,否则它会引发异常。我的代码取自这家伙的代码,它需要在派生类中重写以避免此问题: