【发布时间】:2013-04-28 21:09:45
【问题描述】:
我有一个带有静态构造函数的类。
我希望在不调用或使用其任何成员的情况下调用静态构造函数,但前提是尚未调用构造函数。
我尝试使用反射。通过反射,我可以调用静态构造函数(很多次),但我无法确定它之前是否已经被调用过。
我该怎么做?
编辑
这不仅是我所说的一门课,还可能更多。可以说,所有标有特殊属性的类。
【问题讨论】:
-
设置一个标志。如果您正在设置一些静态状态,则只需要运行静态构造函数,因此设置该状态,然后查看是否设置了构造函数再次运行。
-
@Robert:我需要它是一个通用的解决方案。我事先不知道有多少课,哪些课。标记它不会有帮助,因为 .NET 在调用构造函数时不会设置该标记。
-
你让我好奇了。为什么你觉得有必要在调用任何成员之前运行构造函数,如果这就是它要做的事情吗? (静态构造函数将在执行第一个方法或属性调用之前被调用。在第一个方法或属性被触及之前,任何静态状态都是无关紧要的)。
-
@RobertHarvey:大概是由于副作用,例如在某个中心工厂注册类型。我通常认为这种事情是应该尽可能避免的,但有时它可能是各种丑陋选择中最好的。
-
@Robert:乔恩猜对了。我正在尝试一些插件系统。如果插件文件夹中存在 DLL,则必须加载它。标有 [Register] 属性的类以集中类型注册。标记为 [AutoInitialize] 的其他类型会自动初始化,以便它们可以开始监听事件或类似的事情。
标签: c# static constructor static-constructor