![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
||
|
|
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 6 Всего: 118 |
Итак, представим себе такой класс
суть одна и таже. А как вы предпочитаете общаться со своим классом и почему ? -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| Bogdan1024 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1436 Регистрация: 28.9.2005 Где: Киев Репутация: 3 Всего: 13 |
Дык, свойства не пложу лишний раз если без них можно обойтись. Но в интерфейсах без них никак.
-------------------- ![]() |
|||
|
||||
| elbjarn |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 13.4.2008 Где: Дубна Репутация: 1 Всего: 3 |
я предпочитаю обращаться напрямую к полю класса, а не свойству. по ряду причин.
умозрительная причина: 1. поле класса - это принадлежащая ему внутренняя характеристика. это его собственность, деталь реализации. поэтому он ей и пользуется напрямую. он предоставляет свойство (property) для доступа к этому полю для внешних сущностей (классов, функций), чтобы гарантировать, что он сам будет контролировать, каким образом внешние сущности получают доступ к этому полю (и получают ли вообще). поэтому не вижу смысла в функции класса обращаться к полю этого класса через свойство. напротив, ему должны быть доступны все детали реализации себя самого. прагматическая причина: 2. свойство - фактически, парный набор функций, геттер и сеттер. вызов функции - всегда более дорогостоящее предприятие, чем обращение к переменной в памяти. не вижу смысла занимать лишние такты процессора выполнением функций, выполняющих доступ к переменным класса, если обращение к ним идет внутри самого класса, который по идее должен знать, как с ними обращаться. 3. наконец, вы можете захотеть внутри каких-то функций класса сделать с полем нечто такое, чего нельзя сделать через свойство. например, сеттер запрещает установку значения поля меньше 0, а вам по каким-то причинам (неважно, по каким) понадобится сделать его -1. или у вас свойство доступно только для чтения, а вам надо в него что-то записать. |
|||
|
||||
| PashaPash |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 9 Всего: 49 |
elbjarn, контрпричины:
1. Реализация DependencyProperties, на которые все завязано в 3/3.5, требует явного вызвова свойств. То же с INotifyPropertyChanged. 2. Вызовы get/set инлайнятся jit-ом. Потери производительности - миф и преждевременная оптимизация. 3. Можно выставить разные модификаторы доступа к set/get. Если по каким-то причинам нельзя выставить -1, то где-то уже написан код который не ожидает от геттера значения -1. И наверняка упадет. И вообще - сниппеты prop/propg рулят. 4. Свойства очень упрощают отладку. В VS (пока) нельзя ставить data breakpoints, и очень тяжело изменение значения поля. А поставить bp на сеттер - пару кликов. |
|||
|
||||
| elbjarn |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 13.4.2008 Где: Дубна Репутация: 1 Всего: 3 |
||||
|
||||
| Dims |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1016 Регистрация: 21.11.2006 Репутация: нет Всего: 11 |
Мне кажется, данный пример не показателен. Свойство нужно тогда, когда оно делает что-то сложное. В этом случае может быть выгода от его использования, так как исключается повторная писанина.
Я делаю так. По возможности стараюсь использовать данные, которые лежат за свойствами. А если это очень накладно с точки зрения писанины, то использую свойства. |
|||
|
||||
| PashaPash |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 9 Всего: 49 |
Dims, prop Tab Tab - и никакой писанины. Писанина - это в java.
3-й вариант ес-но, без фанатизма |
|||
|
||||
| Dims |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1016 Регистрация: 21.11.2006 Репутация: нет Всего: 11 |
Сниппеты есть и в других средах, не надо думать, что это Микрософт изобрёл колесо ;)
|
|||
|
||||
| PashaPash |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 9 Всего: 49 |
Dims, да как бы и не утверждаю. Просто если свойства по затратам равны простым полям, то остальные аргументы сколняют в пользу свойств. А вот это:
кажется лично тебе и ничем не потверждено. Не показателен - используй только поля, тебе же хуже. Ну, по крайней мере тебе же не лучше |
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 6 Всего: 118 |
вопрос в тему. в c# 3 можно писать так:
и объявлять даже приватный член не надо, само все создаст. в чем суть такого поля ? если убрать хотябы один метод (get или set) то поле станет бессмысленно так для чего его ввели ? ЗЫ: не читал пока про c# 3 ка следует, так что ткните носом.... Это сообщение отредактировал(а) jonie - 6.11.2008, 10:57 -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| QryStaL |
|
|||
![]() Intellectual feast ![]() ![]() Профиль Группа: Участник Сообщений: 914 Регистрация: 30.11.2005 Репутация: 10 Всего: 32 |
Так а зачем его убирать-то? Всегда используй оба аксессора. -------------------- I don't need a reason being who I am... |
|||
|
||||
| PashaPash |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 9 Всего: 49 |
jonie, смысл в том, что теперь можно задать модификатор доступа для аксессора.
|
|||
|
||||
| Partizan |
|
|||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: 8 Всего: 67 |
PashaPash,
Это было ещё до C# 3.0 раньше тоже это не вызывало никаких проблем. -------------------- СУВ, Partizan. |
|||
|
||||
| PashaPash |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 9 Всего: 49 |
Partizan, для некоторых теперь - это 2.0, а раньше - это 1.1 :(
|
|||
|
||||
| Partizan |
|
|||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: 8 Всего: 67 |
PashaPash, мои соболезнования...эээ...или наоборот поздравления...
кароче наверно поздравления, что некоторые с 1.1 теперь на 2.0 перешли -------------------- СУВ, Partizan. |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | .NET для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |