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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вопрос о свойствах 
V
    Опции темы
ДобренькийПапаша
Дата 2.8.2010, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 14.1.2006
Где: г.Москва

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



1) Зачем нужны автоматические свойства, если в них не реализуется логика инкапсуляции? Я за синтаксический сахар, но эта ситуация мне непонятна.
2) В чём отличие свойства с одним get (свойство только для чтения) и свойства с private set (в данном случае можно красиво обращаться к полю через свойство только в задающем его классе)? Не проще ли всегда использовать private set, ибо наглядней это?


--------------------
Меня зовут Себастьян Парейра, торговец чёрным деревом.
PM MAIL   Вверх
jonie
Дата 2.8.2010, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата

1) Зачем нужны автоматические свойства, если в них не реализуется логика инкапсуляции? Я за синтаксический сахар, но эта ситуация мне непонятна.
Код

...
bool bField {get; private set;}
например для этого.

Цитата

2) В чём отличие свойства с одним get (свойство только для чтения) и свойства с private set (в данном случае можно красиво обращаться к полю через свойство только в задающем его классе)? Не проще ли всегда использовать private set, ибо наглядней это? 
Код

...
bool bIsActive{get { return isactive(); } } 
Например тут set мало применим (не нужен)....


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


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 14.1.2006
Где: г.Москва

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



Второй случай понял. А в первом случае получается, что смысл есть только именно в той конструкции, которую вы привели. То есть в автоматическом свойстве без указания модификаторов доступа смысла ноль.


--------------------
Меня зовут Себастьян Парейра, торговец чёрным деревом.
PM MAIL   Вверх
Gleb
Дата 2.8.2010, 21:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Все это по сто раз обсасывалось с появлением сначала свойств, а потом и автоматических свойств. Гугл мне не даст соврать.
Почитайте framework design guidelines 2nd edition.

Если вкратце, то есть соглашение отделять поля класса, свойства и методы.
Поля для внутренних нужд. Если я вижу поле, я знаю, что оно не будет public  и не будет такого 
Код

MyClass._age = 16


Свойства нужны для взаимодействия с внешним миром, они описывают состояние объекта. Они публичны. 
Конструкция типа 
Код

bool CanRead {get; private set;} 

нужна, например, для инициализации свойств значениями по умолчанию в конструкторе. Или если ваше свойство меняет значение где-то в коде класса между делом (например в ходе выполнения функции вы хотите сказать миру, что ваш класс больше не читаем и выставляете CanRead = false)

С методами знакомы все.

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

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

С опытом разработки на C# вы начнете понимать это интуитивно. И еще раз, прочитайте framework design guidelines 2nd edition.
PM MAIL   Вверх
ДобренькийПапаша
Дата 2.8.2010, 22:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 14.1.2006
Где: г.Москва

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



Цитата(Gleb @ 2.8.2010,  21:42)
Все это по сто раз обсасывалось с появлением сначала свойств, а потом и автоматических свойств. Гугл мне не даст соврать.
Почитайте framework design guidelines 2nd edition.

Если вкратце, то есть соглашение отделять поля класса, свойства и методы.
Поля для внутренних нужд. Если я вижу поле, я знаю, что оно не будет public  и не будет такого 
Код

MyClass._age = 16


Свойства нужны для взаимодействия с внешним миром, они описывают состояние объекта. Они публичны. 
Конструкция типа 
Код

bool CanRead {get; private set;} 

нужна, например, для инициализации свойств значениями по умолчанию в конструкторе. Или если ваше свойство меняет значение где-то в коде класса между делом (например в ходе выполнения функции вы хотите сказать миру, что ваш класс больше не читаем и выставляете CanRead = false)

С методами знакомы все.

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

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

С опытом разработки на C# вы начнете понимать это интуитивно. И еще раз, прочитайте framework design guidelines 2nd edition.

Капитан очевидность.


--------------------
Меня зовут Себастьян Парейра, торговец чёрным деревом.
PM MAIL   Вверх
diadiavova
Дата 2.8.2010, 23:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 31
Всего: 142



Цитата(ДобренькийПапаша @  2.8.2010,  15:01 Найти цитируемый пост)
То есть в автоматическом свойстве без указания модификаторов доступа смысла ноль. 

Единственный смысл автоматически реализуемых свойств состоит в том, чтобы было меньше писанины.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

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


 




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


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

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