2

一部の単体テストでは、CurrentCultureを特定のカルチャに設定します(後でこれらの変更を元に戻します)。これをいくつかの場所で行う必要があるため、古いカルチャを保存してコンストラクタに新しいカルチャを設定し、破棄中に古いカルチャをリセットするCultureChangerクラスを作成することを考えていました。

次に、次のように使用できます。

using(new CultureChanger(culture)){  
    //some code and assertions with no references to the CultureChanger 
}

これを行った場合、usingブロックが完了する前にCultureChangerがクリーンアップされる可能性がありますか?

4

3 に答える 3

6

CultureChangerusingブロックが「完了する」までクリーンアップされません。

usingブロックは、メソッドとほぼ同じ方法でオブジェクトのスコープを定義します。

ブロックの実行後にオブジェクトがガベージコレクションされる時期についての保証はありませんが、それ以前には発生しません。

于 2012-11-19T12:38:10.887 に答える
1

usingステートメントは、IDisposableオブジェクトの正しい使用を保証する便利な構文を提供します。

usingステートメントは、オブジェクトのDisposeメソッドを正しい方法で呼び出します。また、(前に示したように使用する場合)、Disposeが呼び出されるとすぐに、オブジェクト自体もスコープ外になります。usingブロック内では、オブジェクトは読み取り専用であり、変更または再割り当てすることはできません。

usingステートメントは、オブジェクトのメソッドの呼び出し中に例外が発生した場合でも、Disposeが呼び出されるようにします。

于 2012-11-19T12:41:52.323 に答える
1

CultureChangerインスタンスは、usingブロック全体で「有効」のままであり、そのDisposeメソッドは、usingstatemnetの閉じ中括弧「}」で呼び出されます。したがって、あなたの質問に対する答えは次のとおりです。CultureChangerがクリーンアップされるリスクはありません。

于 2012-11-19T12:44:39.633 に答える