Инициализация свойств объекта


5 0

Иногда часто после создания объекта нужно сразу же назначить кучу его свойств. Такое бывает если класс спроектировал начинающий программист или если класс реально сложный, типа формы. Если класс простой и оперирует всего парой свойств, то желательно создавать конструктор, который будет сразу же инициализировать все необходимые значения. Например, посмотрим на класс Size. Его можно проинициализировать так:

Size  s = new Size();
s.Width = 10;
s.Height = 10;

А можно воспользоваться другим конструктором:

Size  s = new Size(s.Width, s.Height);

Лично я предпочитаю второй вариант, потому что он проще. Меня вообще колбасит от лишних строчек кода, которые нафиг не нужны.

Но что, если мы инициализируем форму? У нее столько свойств, что предусмотреть конструктор на все случаи жизни просто нереально, и даже больше похоже будет на клинику. Я заметил, что большинство в этом случае использует вариант с явным заданием свойств после инициализации объекта. В принципе, ничего в этом плохого нет. Просто есть еще один способ инициализации, который мало кто использует. По крайней мере мой опыт показывает, что большинство его просто игнорируют:

Form f = new Form() { Left = 10, Top = 20 };

Сразу после инициализации формы в фигурных скобках мы задаем свойства левого и верхнего края формы. В принципе, с точки зрения текста мы ничего не выиграли. Сравни:

Form f = new Form(); Left = 10; Top = 20;

Если посчитать количество символов, то сейчас их даже меньше. Но я думаю, что программисты выбирают этот способ не из-за количества символов, а из-за наглядности. Мне кажется, что писать все в своей строке все же нагляднее, поэтому большинство пишет явно

Form f = new Form(); 
Left = 10; 
Top = 20;

Понравилось? Кликни Лайк, чтобы я знал, какой контент более интересен читателям. Заметку пока еще никто не лайкал и ты можешь быть первым


Комментарии

Сергей

07 Декабря 2010

А можно ли ходить по свойствам циклом for?

что то в этом духе:


fornn := 0 to object.property.count - 1 do
begin
if object.property[nn].name = 'Width' then object.property[nn].size := 20;

if object.property[nn].type = string then
object.property[nn] := '';

end;


Михаил Фленов

07 Декабря 2010

2Сергей: Без проблем


PropertyInfo[] pi = this.GetType().GetProperties();

for (int index = 0; i < pi.Length; index++) {
if (pi[index].PropertyType == typeof(Color)) {    
   Color c = (Color)(pi[index].GetValue(this, null));
}
}


Константин

08 Декабря 2010

"Меня вообще колбасит от лишних строчек кода, которые нафиг не нужны."

Мне тоже не нравиться когда в коде лишние строки, а так как опыта у меня мало, очень часто задумываюсь о том что может быть есть стандартные функции для выполнения определённых задач.


Pushok

08 Декабря 2010

Имо, ходить циклом по свойствам есть резон, только если не знаешь их, а так не теряется ли производительность?
К тому же, чтобы задать одно свойство, мы проходимся по всем


Сергей

08 Декабря 2010

-> Pushok
ходить по всем свойствам ради того чтобы инициализировать два - три из них конечно смысла нет.


Добавить Комментарий

Еще что-нибудь

Хотите найти еще что-то интересное почитать? Можно попробовать отфильтровать заметки на блоге по категориям.

О блоге

Программист, автор нескольких книг серии глазами хакера и просто блогер. Интересуюсь безопасностью, хотя хакером себя не считаю

Обратная связь

Без проблем вступаю в неразборчивые разговоры по e-mail. Стараюсь отвечать на письма всех читателей вне зависимости от страны проживания, вероисповедания, на русском или английском языке.

Пишите мне