Установить переменные для «ничего» - хорошая практика?

StackOverflow https://stackoverflow.com/questions/4820952

  •  26-10-2019
  •  | 
  •  

Вопрос

Если я получил

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 это возможно (хотя и очень маловероятно), чтобы фактически отбросить сборщик мусора и иметь другие неожиданные побочные эффекты.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top