0

処理するたびに再初期化が必要なアプリケーションがあります。何かのようなもの :

private void method(int someValue, int someValue2)
{
 obj.val1 = someNewValue;
 obj1.Val2 = someNewValue2;
}

このメソッドは繰り返し呼び出されます。それで、毎回オブジェクトを再初期化するのは大丈夫だと思いますか? 何かのようなもの;

private void method(int someValue, int someValue2)
{
 obj = new object();
 obj.Val1 = someNewValue;
 obj1.Val2 = someNewValue2;


}

nullオブジェクトへの割り当ては、何の役にも立たないことを知っています。または実装する必要がありますIDisposableか?問題は、毎回新しい値が必要なことです。このシナリオでは、割り当ては問題ありませんか? 2 番目の方法に示すように再初期化すると、既に割り当てられているオブジェクトがどうなるかわかりません。

4

2 に答える 2

5

「参照オブジェクト」は、Dispose()アンマネージ メモリを使用する場合にのみ (を呼び出して) 破棄する必要があります。そのようなすべてのオブジェクト (.NET クラス ライブラリ内) は を実装しIDisposableます。一方、管理対象オブジェクトは、バックグラウンドでガベージ コレクターによって自動的に収集 (削除) されます。実際、管理対象オブジェクトを直接削除する方法はありません。そのようなオブジェクトについて心配する必要はありません。それらが範囲外になるとすぐに、GC は最終的にそれらのメモリを解放します。

管理変数に新しい値を割り当てるだけで、以前の値の参照が解放されるため、GC による削除が可能になります。

于 2013-09-19T09:25:37.940 に答える
3

このオブジェクトはカスタム クラスですか? もしそうなら、必要なすべてのリセットを行う「Reset()」メソッドを作成します。

たとえば、あなたは電話するでしょう

private void method(int someValue, int someValue2)
{
 obj.Reset();
 obj.Val1 = someValue;
 obj1.Val2 = someValue2;
}

リセット機能では、オブジェクトが「再初期化された」と見なすために必要なことは何でもします

すなわち

public void Reset()
{
    this.Val1 = 0;
    this.Val2 = 0;
    this.Name = "";
    this.Date = DateTime.MinDate;
    //You get the Idea, reset whatever needed to whatever you need.
}

この関数を使用すると、コンストラクターで単に "Reset();" を呼び出すこともできます。したがって、別のメソッドがこのオブジェクトで「リセット」を呼び出し、新しいオブジェクトが作成された場合、値が同じであることがわかります。

于 2013-09-19T09:23:10.470 に答える