只读变量声明的顺序是否保证了值的设置顺序?

时间:2010-04-29 17:26:47

标签: c# .net-3.5 readonly variable-declaration

假设我有一些文件路径的只读变量,我是否能够保证根据声明顺序分配值的顺序?

e.g。

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";

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

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

更新

我已经添加了static关键字(因为我正在使用它以及它编译的原因)以及Path.Combine的建议。

3 个答案:

答案 0 :(得分:3)

订单不重要。运行时保证在使用它们时初始化所有对象。

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

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

顺便说一句:连接目录的正确方法是使用Path.Combine而不是字符串连接。

答案 1 :(得分:0)

“有可能......”

不,编译器不允许您从subpath1 / 2声明访问basepath。您可以使用常量而不是只读变量来执行此操作。

答案 2 :(得分:0)

我怀疑你确实想要使用常量:

    const string basepath = @"my\base\directory\location";
    const string subpath1 = basepath + @"\abc\def";
    const string subpath2 = basepath + @"\ghi\klm";
无论代码中的声明顺序如何,

subpath1 / 2肯定会有填充的basepath前缀。