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当時の文字列のデフォルト値のままで、文字列をsubpath1参照subpath2する可能性はありますか?

宣言時ではなくコンストラクターで値を割り当てることで、おそらく順序を保証できることに気づきました。ただし、静的クラス内で変数を宣言する必要がある場合 (たとえば、コンストラクターの代わりに static void Main() プロシージャを持つコンソール アプリケーションの Program.cs)、このアプローチは不可能だと思います。

アップデート:

static キーワードを追加しました (これが私が使用しているものであり、コンパイルする理由です) と、提案されている Path.Combine も追加しました。

4

3 に答える 3

3

順序は重要ではありません。ランタイムは、すべてのオブジェクトが使用時に初期化されることを保証します。

これは保証できないため、具体的なケースは実際にはコンパイルできません。

そして、コンストラクターのアプローチについては正しいです。また、静的変数にこれが必要な場合でも、静的コンストラクターを指定できるため問題ありません。

ところで、ディレクトリを連結する正しい方法は、文字列連結ではなく Path.Combine を使用することです。

于 2010-04-29T17:33:07.803 に答える
0

"出来ますか.."

いいえ、コンパイラは subpath1/2 宣言からベースパスにアクセスできません。読み取り専用変数の代わりに定数を使用できます。

于 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 には、コード内の宣言順序に関係なく、basepath プレフィックスが確実に入力されます。

于 2010-04-29T17:32:44.340 に答える