将变量设置为"Nothing"是一个好习惯吗?

Vol*_*ort 4 vb.net memory nothing

如果我有

Dim myRect As Rectangle = New Rectangle(0,0,100,100)
Run Code Online (Sandbox Code Playgroud)

以后这样做是否有必要或者很好:

myRect = Nothing
Run Code Online (Sandbox Code Playgroud)

或者没有必要?谢谢.

如果有必要,还有其他情况不适合我的变量吗?

Dan*_*Tao 7

一般来说,正如乔尔所说,这是不必要的.

但是,在您的具体示例中,它实际上毫无意义.Rectangle是一个值类型,因此将其设置Nothing甚至不会影响对象的引用计数; 它为您的变量分配一个新(默认值Rectangle)myRect.这类似于拥有Integer变量并将其设置0为方法的末尾.什么都买不到.


我应该指出,声明"将任何变量设置为Nothing[或null在C#中]永远不会完成任何事情"*是一个神话.如果不再需要引用的对象但您仍然可以引用类实例本身,则完全有可能在类中有一个字段,您可以设置该字段null.

作为一个简单的例子,假设你有一个包装T[]数组的容器类,你给这个容器一个Empty方法.null在这个方法中设置容器的内部数组可能是有意义的,这将导致对数组对象的零引用,使其符合垃圾回收的条件.(然后,当外部代码尝试将a添加T到集合时,您将创建一个新数组.)如果未将该字段设置为null Empty,则仍会存在对该数组的引用(即字段),并且所以这将是你真正不需要的少量内存.

就像我说的那样,这是一个简单的例子.老实说,你很少需要考虑这样的场景.我只是想我会提到它,这样你就不会得到错误的印象,即设置一个Nothing字面上一事无成.

*我实际上并没有引用任何具体的人; 这只是我听过不止一次的过度概括.


Joe*_*orn 5

不要这样做.这在vb6天很重要,但对于.Net,它可能(尽管非常不可能)实际上关闭垃圾收集器并产生其他意想不到的副作用.

  • 有了这个陈述:但是对于.Net来说,它可能(尽管非常不可能)实际上关闭垃圾收集器并产生其他意想不到的副作用.你实际上质疑.net的基础.我非常怀疑是这种情况. (4认同)