質問

私が手に入れたら

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にとっては(非常にありそうもないが)、実際にゴミコレクターを捨てて他の予期しない副作用を持つことは可能です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top