4

私が得た場合

Dim myRect As Rectangle = New Rectangle(0,0,100,100)

後でこれを行う必要がありますか、それとも問題ありませんか?

myRect = Nothing

またはそれは必要ではありませんか?ありがとうございました。

必要な場合、私の変数ではない他のケースはありますか?

4

2 に答える 2

7

一般的に、ジョエルが言ったように、それは不要です。

ただし、特定の例では、実際には無意味です。Rectangle値型であるため、に設定してオブジェクトの参照カウントにNothingは影響しません。変数に新しい値(のデフォルト値)を割り当てます。これは、変数を持ち、メソッドの最後にそれを設定することに似ています。何も買わない。RectanglemyRectInteger0


Nothing「 [またはnullC#で]変数を設定しても何も達成されない」*という主張は神話であることに注意してください。参照されるオブジェクトが不要になったが、クラスインスタンス自体への参照が残っている場合は、クラスにフィールドを設定することもできます。null

T[]単純な例として、配列をラップするコンテナクラスがあり、このコンテナにEmptyメソッドを指定するとします。このメソッドでコンテナの内部配列をに設定することは理にかなっているnull場合があります。これにより、配列オブジェクトへの参照がゼロになり、ガベージコレクションの対象になります。(次に、外部コードが次にコレクションにを追加しようとしたときに、新しい配列を作成しますT。)フィールドをnullに設定しなかった場合Emptyでも、配列(つまり、フィールド)への参照があり、そのため、実際には必要のない少量のメモリが使用されます。

私が言ったように、それは単純な例です。そして正直なところ、そのようなシナリオを検討する必要があることはめったにありません。フィールドNothing文字通り何も達成しないように設定するという誤った印象を与えないように、私はそれについて言及しようと思いました。

*ここで特定の人を実際に引用しているわけではありません。これは、私が何度も述べているのを聞いただけの過度の一般化です。

于 2011-01-27T19:42:40.447 に答える
5

しないでください。これはvb6の時代に行うことが重要でしたが、.Netの場合、実際にガベージコレクターを破棄し、その他の予期しない副作用が発生する可能性があります(非常にまれですが)。

于 2011-01-27T19:37:22.350 に答える