代码之家  ›  专栏  ›  技术社区  ›  Jason Down

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

  •  2
  • Jason Down  · 技术社区  · 14 年前

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

    例如

    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 可能仍然是字符串的默认值 subpath1 subpath2 引用字符串?

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

    更新:

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

    3 回复  |  直到 14 年前
        1
  •  3
  •   Foxfire    14 年前

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

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

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

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

        2
  •  0
  •   heisenberg    14 年前

    “可能吗…”

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

        3
  •  0
  •   Daniel Renshaw    14 年前

    我怀疑你真的想用常量:

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

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