Установить переменные для «ничего» - хорошая практика?
Вопрос
Если я получил
Dim myRect As Rectangle = New Rectangle(0,0,100,100)
Это необходимый или просто отлично Позже сделать это:
myRect = Nothing
Или это не нужно? Спасибо.
ЕСЛИ Это необходимо, есть ли другие случаи не для моих переменных?
Решение
В общем, как Джоэл сказал, это не нужно.
В вашем конкретном примере, однако, это на самом деле бессмысленный. Rectangle
это тип значения, так что установите его на Nothing
не является даже влияет на количество ссылок объекта; назначает новый ценность (Значение по умолчанию для Rectangle
) на ваш myRect
переменная. Это аналогично наличию Integer
переменная и установить его на 0
в конце метода. Ничего не покупает.
Я должен отметить, что утверждение «Установить любую переменную на Nothing
или же null
в C#] никогда ничего не выполняет »* - это миф. Вполне возможно, что у вас может быть поле в классе, который вы могли бы также настроить null
Если ссылки на объект больше не нужен, но у вас все еще есть ссылка на сам экземпляр класса.
В качестве упрощенного примера, предположим, у вас был класс контейнеров, который завершает T[]
массив, и вы даете этому контейнеру Empty
метод Может иметь смысл установить внутренний массив контейнера на null
В этом методе, который приведет к нулевым ссылкам на объект массива, квалифицируя его для сбора мусора. (Затем вы создали бы новый массив, когда внешний код затем попытался добавить T
в коллекцию.) Если вы не установили поле на NULL на Empty
, Тогда все еще будет ссылка на массив (то есть поле), и поэтому это будет небольшое количество памяти, которую вам действительно не нужно.
Как я уже сказал, это упрощенный пример. И, честно говоря, редко вам когда -либо нужно рассматривать подобные сценарии. Я просто подумал, что упомяну об этом, чтобы не получить неправильное впечатление, что установка поле к Nothing
Буквально никогда ничего не достигает.
*Я на самом деле никого не цитирую здесь; Это просто чрезмерная генерализация, которую я слышал не раз.
Другие советы
Не делай этого. Это было важно сделать в дни VB6, но для .NET это возможно (хотя и очень маловероятно), чтобы фактически отбросить сборщик мусора и иметь другие неожиданные побочные эффекты.