変数を「何もない」に設定することは良い習慣ですか?
質問
私が手に入れたら
Dim myRect As Rectangle = New Rectangle(0,0,100,100)
それは...ですか 必要 あるいは単に 大丈夫 後でこれを行うには:
myRect = Nothing
またはそれは必要ありませんか?ありがとうございました。
もしも それは必要です、私の変数のためにそれがない他のケースはありますか?
解決
一般的に、 ジョエルは言った, 、それは不要です。
ただし、特定の例では、実際には 無意味. Rectangle
aです 値タイプ, 、だからそれを設定します Nothing
ではありません 平 オブジェクトの参照カウントに影響します。新しいものを割り当てています 価値 (のデフォルト値 Rectangle
)あなたに myRect
変数。これは、を持っていることに類似しています Integer
変数と設定 0
メソッドの終わりに。何も買わない。
私は、「変数をに設定する」というクレームを指摘する必要があります Nothing
また null
in c#]は何も達成しません」*は神話です。あなたが持っている可能性は完全にあります 分野 あなたが同じように設定するかもしれないクラスで null
参照されたオブジェクトが不要になったが、クラスインスタンス自体への参照があります。
単純な例として、あなたがラップするいくつかのコンテナクラスがあると仮定します T[]
配列、そしてあなたはこの容器を与えます Empty
方法。コンテナの内部配列をに設定することは理にかなっているかもしれません null
この方法では、アレイオブジェクトへの参照がゼロになり、ガベージコレクションの資格があります。 (次に、外部コードが次に追加しようとしたときに新しい配列を作成します T
コレクションに。)あなたがフィールドをnullに設定しなかった場合 Empty
, 、それからアレイ(つまり、フィールド)への参照がまだあるので、それはあなたが本当に必要としない少量のメモリが使用されているでしょう。
私が言ったように、それは単純な例です。正直なところ、そのようなシナリオを考慮する必要があることはまれです。私はちょうど私がそれを言及するだろうと思ったので 分野 に Nothing
文字通り何も達成しません。
*私は実際にここで特定の人を引用していません。これは、私が何度も述べたことを聞いただけの過剰な一般化です。
他のヒント
それをしないでください。これはVB6時代に行うことが重要でしたが、.NETにとっては(非常にありそうもないが)、実際にゴミコレクターを捨てて他の予期しない副作用を持つことは可能です。