Pregunta

Si tengo

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

Lo es necesario o solo multa Más tarde hacer esto:

myRect = Nothing

¿O no es necesario? Gracias.

SI Es necesario, ¿hay otros casos no es para mis variables?

¿Fue útil?

Solución

En general, como Dijo Joel, es innecesario.

En su ejemplo específico, sin embargo, en realidad es inútil. Rectangle es un tipo de valor, entonces configurarlo en Nothing no es incluso afectando el recuento de referencia de un objeto; está asignando un nuevo valor (el valor predeterminado para Rectangle) para usted myRect variable. Esto es análogo a tener un Integer variable y configurarlo en 0 Al final de un método. No te compra nada.


Debo señalar que la afirmación "establece cualquier variable en Nothing o null en c#] nunca logra nada "* es un mito. Es completamente posible que tenga un campo en una clase a la que bien podrías establecer null Si el objeto referenciado ya no es necesario, pero aún tiene una referencia a la instancia de clase en sí.

Como ejemplo simplista, suponga que tenía una clase de contenedor que envuelve un T[] matriz, y le das a este contenedor un Empty método. Puede tener sentido establecer la matriz interna del contenedor en null En este método, que daría lugar a cero referencias al objeto de matriz, calificarlo para la recolección de basura. (Luego crearía una nueva matriz cuando el código externo intentó agregar un T a la colección.) Si no estableció el campo en NULL ON Empty, entonces todavía habría una referencia a la matriz (es decir, el campo), por lo que esa sería una pequeña cantidad de memoria que se usa que realmente no necesita.

Como dije, ese es un ejemplo simplista. Y honestamente, es raro que alguna vez deba considerar escenarios como ese. Solo pensé que lo mencionaría para que no tengas la impresión equivocada de que establecer un campo a Nothing Literalmente nunca logra nada.

*En realidad no estoy citando a nadie específico aquí; Esto es solo una generalización excesiva que he escuchado declarado más de una vez.

Otros consejos

No lo hagas. Esto fue importante en los días VB6, pero para .NET es posible (aunque muy poco probable) que realmente tire el recolector de basura y tenga otros efectos secundarios inesperados.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top