Я считаю программирование искусством. Таким образом, я разделяю методы, когда считает правильным разделить их или написать новый.
Тем не менее, есть некоторые правила большого пальца (которые не отменяют мои инстинкты).
ЕСЛИ у вас есть deja vue (код, который вы пишете, кажется знакомым), вы, вероятно, повторяетесь Это означает, что вы должны использовать существующую функцию / метод, а не писать новую.
Не более двух глубоких конструкций
для (...) для (...) для (...) ПЛОХОЙ
Нет более одной петли подряд (одна за другой).
Это будет собираться GC. Чтобы объект сохранялся в памяти, он должен прямо или косвенно ссылаться на ...
Это неверно для объекта в лицах [0]. Итак, он будет собран.
Это, конечно, при условии, что конструктор для Person () не делает ничего забавного, например, добавляет себя в ThreadLocalStorage.
Вы на полпути; это было бы утечкой памяти, если бы было наоборот. То есть, если бы это выглядело так:
public class Test
{
public void HookupStuff()
{
List<Person> persons = new List<Person> { new Person() };
this.EventHappened += new EventHandler(persons[0].SomeMethod);
// persons[0].Sneezing += new EventHandler(Person_Sneezing);
persons = null;
}
}
Теперь лиц [0]
будут оставаться, даже если вы обнулили человек
, поскольку родительский класс имеет ссылку на метод на нем.
В дополнение к уже полученным ответам, вам нужно быть осторожным с более реалистичными примерами.
Если в вашем приложении есть главное окно, которое сохраняется, пока выполняется программа, и вы часто создаете «недолговечные» объекты, которые присоединяют свои методы к событиям в главном окне, тогда вы должны исключить объекты из этих событий, когда они вам больше не нужны, потому что в противном случае эти объекты не будут «недолговечными» в все - они будут жить до тех пор, пока не откроется главное окно, т.е. пока пользователь не закроет приложение. Эффективный результат будет эквивалентен утечке памяти.
Это может помочь, если вы сделаете класс недолговечного объекта реализацией IDisposable
, чтобы вы могли исключить события из списка в Dispose
,