Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как обращаетесь к своим полям (Property VS field)? this.field OR this.Property 
:(
    Опции темы
 
Как вы обращаетесь к данным своего класса
Я использую свойства своего же класса, для доступа к его полям (если таковые, конечно, есть) [ 6 ]  [33.33%]
Я всегда обращаюсь напрямую к члену класса (this.field), даже есть имеется свойство, делающее тоже самое [ 5 ]  [27.78%]
Я использую смешанный стиль (нет четкого разделения) [ 7 ]  [38.89%]
Всего проголосовавших: 18
В этом опросе возможен один вариант ответа
Гости не могут голосовать 
jonie
Дата 4.11.2008, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 6
Всего: 118



Итак, представим себе такой класс
Код

class Some{
 private int a;

 public int A {
   get { return a; }
 }

 /*
  используем field напрямую
 */
 public int foo() {
  return a*2;
 }

 /*
  используем свойство
 */
 public int foo2() {
  return A*2;
 }

}

суть одна и таже.
А как вы предпочитаете общаться со своим классом и почему ?


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Bogdan1024
Дата 4.11.2008, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1436
Регистрация: 28.9.2005
Где: Киев

Репутация: 3
Всего: 13



Дык, свойства не пложу лишний раз если без них можно обойтись. Но в интерфейсах без них никак.


--------------------
user posted image
PM MAIL   Вверх
elbjarn
Дата 4.11.2008, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 13.4.2008
Где: Дубна

Репутация: 1
Всего: 3



я предпочитаю обращаться напрямую к полю класса, а не свойству. по ряду причин.
умозрительная причина:
1. поле класса - это принадлежащая ему внутренняя характеристика. это его собственность, деталь реализации. поэтому он ей и пользуется напрямую. он предоставляет свойство (property) для доступа к этому полю для внешних сущностей (классов, функций), чтобы гарантировать, что он сам будет контролировать, каким образом внешние сущности получают доступ к этому полю (и получают ли вообще). поэтому не вижу смысла в функции класса обращаться к полю этого класса через свойство. напротив, ему должны быть доступны все детали реализации себя самого.
прагматическая причина:
2. свойство - фактически, парный набор функций, геттер и сеттер. вызов функции - всегда более дорогостоящее предприятие, чем обращение к переменной в памяти. не вижу смысла занимать лишние такты процессора выполнением функций, выполняющих доступ к переменным класса, если обращение к ним идет внутри самого класса, который по идее должен знать, как с ними обращаться.
3. наконец, вы можете захотеть внутри каких-то функций класса сделать с полем нечто такое, чего нельзя сделать через свойство. например, сеттер запрещает установку значения поля меньше 0, а вам по каким-то причинам (неважно, по каким) понадобится сделать его -1. или у вас свойство доступно только для чтения, а вам надо в него что-то записать. 
PM MAIL ICQ   Вверх
PashaPash
Дата 4.11.2008, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 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 на сеттер - пару кликов.


--------------------
PM MAIL WWW   Вверх
elbjarn
Дата 4.11.2008, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 13.4.2008
Где: Дубна

Репутация: 1
Всего: 3



Цитата(PashaPash @  4.11.2008,  14:34 Найти цитируемый пост)
elbjarn, контрпричины:

мне нечего возразить)
третьм фреймворком еще не приходилось пользоваться. и про оптимизацию jit-ом обращений к свойствам не знал, хотя мог бы догадаться...

Это сообщение отредактировал(а) elbjarn - 4.11.2008, 15:34
PM MAIL ICQ   Вверх
Dims
Дата 4.11.2008, 22:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1016
Регистрация: 21.11.2006

Репутация: нет
Всего: 11



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

Я делаю так. По возможности стараюсь использовать данные, которые лежат за свойствами. А если это очень накладно с точки зрения писанины, то использую свойства.


PM MAIL   Вверх
PashaPash
Дата 5.11.2008, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

Репутация: 9
Всего: 49



Dims, prop Tab Tab - и никакой писанины. Писанина - это в java.

3-й вариант ес-но, без фанатизма


--------------------
PM MAIL WWW   Вверх
Dims
Дата 5.11.2008, 18:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1016
Регистрация: 21.11.2006

Репутация: нет
Всего: 11



Сниппеты есть и в других средах, не надо думать, что это Микрософт изобрёл колесо ;)
PM MAIL   Вверх
PashaPash
Дата 5.11.2008, 19:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

Репутация: 9
Всего: 49



Dims, да как бы и не утверждаю. Просто если свойства по затратам равны простым полям, то остальные аргументы сколняют в пользу свойств. А вот это:
Цитата(Dims @  4.11.2008,  22:58 Найти цитируемый пост)
Мне кажется, данный пример не показателен.

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


--------------------
PM MAIL WWW   Вверх
jonie
Дата 6.11.2008, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 6
Всего: 118



вопрос в тему. в c# 3 можно писать так:
Код

class some{
 public object ProperyName { get; set;}
}

и объявлять даже приватный член не надо, само все создаст.
в чем суть такого поля ?
если убрать хотябы один метод (get или set) то поле станет бессмысленно
так для чего его ввели ?

ЗЫ: не читал пока про c# 3 ка следует, так что ткните носом....

Это сообщение отредактировал(а) jonie - 6.11.2008, 10:57


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
QryStaL
Дата 6.11.2008, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Intellectual feast
**


Профиль
Группа: Участник
Сообщений: 914
Регистрация: 30.11.2005

Репутация: 10
Всего: 32



Цитата(jonie @  6.11.2008,  10:56 Найти цитируемый пост)
если убрать хотябы один метод (get или set) то поле станет бессмысленно

Так а зачем его убирать-то?
Всегда используй оба аксессора.


--------------------
I don't need a reason being who I am...
PM MAIL ICQ   Вверх
PashaPash
Дата 6.11.2008, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

Репутация: 9
Всего: 49



jonie, смысл в том, что теперь можно задать модификатор доступа для аксессора.
Код

        public int MyProperty { get; private set; }



--------------------
PM MAIL WWW   Вверх
Partizan
Дата 6.11.2008, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 8
Всего: 67



PashaPash, 
Цитата

теперь можно


Это было ещё до C# 3.0
раньше тоже это не вызывало никаких проблем.


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
PashaPash
Дата 6.11.2008, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

Репутация: 9
Всего: 49



Partizan, для некоторых теперь - это 2.0, а раньше - это 1.1 :(


--------------------
PM MAIL WWW   Вверх
Partizan
Дата 6.11.2008, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 8
Всего: 67



PashaPash, мои соболезнования...эээ...или наоборот поздравления...
кароче наверно поздравления, что некоторые с 1.1 теперь на 2.0 перешли smile


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1015 ]   [ Использовано запросов: 24 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.