【发布时间】:2019-11-26 10:24:46
【问题描述】:
我拥有的是:
public static class IDs {
public static string someID { get; set; }
static IDs() {
log.info(someID);
// use someID here
}
}
public class otherClass {
public void otherMethod(string sym) {
IDs.someID = sym;
}
}
然后像这样使用otherClass 的实例:
otherClassInstance.otherMethod("someStringSymbol");
我没有任何构建错误,但 log.info(someID); 正在打印 null。
我期待它是someStringSymbol。
【问题讨论】:
-
未定义静态构造函数发生的顺序。 (静态 initializers 发生的顺序是,但即使那样也不是跨类。)定义不明确的顺序,以及几乎不可能从它们中的错误中恢复,应该是一个强烈的抑制因素使用静态构造函数期间,尤其是当您要引入依赖项时。更喜欢具有明确初始化时间的实例,即使您制作了那些单例。
-
您发布的代码无法编译。请使用minimal, reproducible example 编辑您的问题。
-
在设置
someID属性之前调用静态构造函数。这是预期的行为。在类型初始化之前不能设置属性。 -
你想达到什么目的?
标签: c#