关于c#:只读变量声明的顺序是否保证了值的设置顺序?

Does the order of readonly variable declarations guarantee the order in which the values are set?

假设我有几个文件路径的只读变量,我能保证根据声明的顺序分配值的顺序吗?

例如

1
2
3
static readonly string basepath = @"my\base\directory\location";
static readonly string subpath1 = Path.Combine(basepath, @"abc\def");
static readonly string subpath2 = Path.Combine(basepath, @"ghi\klm";

这是一种安全的方法,还是可能在subpath1subpath2引用字符串时,basepath仍然是字符串的默认值?

我意识到我可以通过在构造函数中分配值而不是在声明时来保证顺序。但是,我相信如果我需要声明静态类内的变量(例如,控制台应用程序的program.cs,它有一个静态void main()过程而不是构造函数),这种方法是不可能的。

更新:

我已经添加了静态关键字(因为这是我使用的以及它编译的原因)和path.combine,如建议的那样。


顺序不重要。运行时保证所有对象在使用时都被初始化。

您的具体案例实际上不可编译,因为无法保证这一点。

对于构造函数方法,您是正确的。如果静态变量需要这个,也没问题,因为您可以指定一个静态构造函数。

和btw:正确的目录连接方法是使用path.combine而不是字符串连接。


我怀疑你真的想用常量:

1
2
3
    const string basepath = @"my\base\directory\location";
    const string subpath1 = basepath + @"\abc\def";
    const string subpath2 = basepath + @"\ghi\klm";

不管代码中的声明顺序如何,子路径1/2肯定会有填充的basepath前缀。


"可能吗…"

不,编译器不允许您从子路径1/2声明访问basepath。您可以使用常量,而不是只读变量。