Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Вопрос о свойствах


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

Автор: jonie 2.8.2010, 13:47
Цитата

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

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

Цитата

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

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

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

Автор: 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.

Автор: ДобренькийПапаша 2.8.2010, 22:50
Цитата(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.

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

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

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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)