2

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

例如

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 的建议。

4

3 回答 3

3

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

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

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

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

于 2010-04-29T17:33:07.803 回答
0

“是否可以..”

不,编译器不会让您从 subpath1/2 声明中访问 basepath。您可以使用常量而不是只读变量来做到这一点。

于 2010-04-29T17:30:15.857 回答
0

我怀疑您实际上想使用常量:

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

无论代码中的声明顺序如何,subpath1/2 肯定都会填充基本路径前缀。

于 2010-04-29T17:32:44.340 回答