Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/21: Рейтинг темы: голосов - 21, средняя оценка - 4.62
0 / 0 / 0
Регистрация: 12.01.2018
Сообщений: 4

Аксессоры get, set

20.06.2018, 08:25. Показов 4356. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Вопрос, наверное, глупый, но все же. Я никак не могу понять для чего нужно использовать аксессоры get; set; пересмотрел много видео, перечитал кучу форумов, но объяснения, которое было бы понятно мне не нашел. Как я понимаю, с помощью них можно ограничивать допустимый ввод данных и получать доступ из других классов. Это единственные их функции или есть и другие? Почему вместо аксессоров нельзя использовать для переменных public?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.06.2018, 08:25
Ответы с готовыми решениями:

Свойства и Аксессоры
Возник такой вопрос по аксессорам: Пусть класс Sample содержит свойство Length с аксессорами get и set. Какие из следующих фрагментов...

Аксессоры против методов
Доброго времени суток, раньше изучал С++, и при переходе на c# заметил что много используют аксессоры вместо привычных для меня методов,...

Аксессоры к полям закрытой структуры
public class DataSource { private struct Bars { public DateTime date; // Время закрытия ...

4
75 / 75 / 96
Регистрация: 29.09.2012
Сообщений: 232
20.06.2018, 08:48
Потому что нужно придерживаться парадигм ООП, в частности здесь используется Инкапсуляция для сокрытия данных.
get позволяет организовать безопасное обращению к полю private для чтения, а set позволяет безопасно устанавливать значения этого поля. Так же в свойствах вы можете организовать различные проверки данных.
0
Эксперт JS
6496 / 3907 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
20.06.2018, 09:50
Цитата Сообщение от kor1b Посмотреть сообщение
Почему вместо аксессоров нельзя использовать для переменных public?
Очень важный случай - хочу различные случаи запрета на изменение значения поля:
C#
1
2
{ get; private set; }
{ get; }
Очень красивый и полный ответ для огромного количества случаев: В Яндексе

Добавлено через 8 минут
Кстати, мало где пишут, но компилятор может и оптимизировать акцесоры, делая inline-подстановки для простых вариантов акцессоров. Так что далеко не всегда акцессор является настоящим методом.

Проверять сборку можно в отдельной программе Net Reflector.
0
 Аватар для netBool
325 / 304 / 173
Регистрация: 16.11.2010
Сообщений: 1,069
Записей в блоге: 9
20.06.2018, 17:10
Цитата Сообщение от kor1b Посмотреть сообщение
Я никак не могу понять для чего нужно использовать аксессоры get; set;
На самом деле хороший вопрос, тк ответ на него далеко не всегда очевидный

Цитата Сообщение от kor1b Посмотреть сообщение
Как я понимаю, с помощью них можно ограничивать допустимый ввод данных
1. В set можно ограничивать ввод данных. В get - ограничивать вывод
2 В get можно делать какой-то расчет для вычисления значения свойства
3. В set можно добавить доп. вычислительную логику, важную для класса/объекта в целом
4 Можно делать логгирование чтения и записи свойств. Это очень важно. Есть даже такой замечательный паттерн MVVM, который благодаря отслеживанию изменений свойств, позволяет менять содержимое view. И он сейчас популярен
5 В конце концов, это закладка на будущее. Если у вас нет никакой доп логики в set/get, это не значит, что она не может появиться в процессе роста проекта. И в принципе в поведении ничего может и не измениться: что к свойству, что к полю мы обращаемся с помощью .Имя. Но это в случае, если вы не используете Reflection и другие подобные библиотеки. Если используете их активно, то придется переписывать многое заново

Пожалуй, у меня все. Может, еще кто-то что добавит.

Выводы: исходя из всего вышесказанного использовать get;set; является хорошим стилем, если вы хотите расти, просто возьмите это в привычку

Добавлено через 47 минут
Цитата Сообщение от amr-now Посмотреть сообщение
Кстати, мало где пишут, но компилятор может и оптимизировать акцесоры, делая inline-подстановки для простых вариантов акцессоров. Так что далеко не всегда акцессор является настоящим методом.
jit-компилятор может. В il-коде они все равно будут методами
0
29 / 31 / 27
Регистрация: 15.11.2017
Сообщений: 121
20.06.2018, 19:32
Цитата Сообщение от kor1b Посмотреть сообщение
Я никак не могу понять для чего нужно использовать аксессоры get; set;
Можно написать так:
C#
1
2
3
4
5
6
7
public string name;
 
public void SetName(string name)
  => this.name = name;
 
public string GetName()
  => this.name;
а можно вот так:
C#
1
2
3
4
5
6
7
public string name;
 
public string Name
{
  get => this.name;
  set => this.name = value;
}
или так:
C#
1
public string Name { get; set; }
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.06.2018, 19:32
Помогаю со студенческими работами здесь

Аксессоры автоматических свойств и событий
Здравствуйте! Подскажите, пожалуйста, вызываются ли аксессоры автоматических свойств и событий, если к ним обращаться внутри класса, или...

Аксессоры для всех переменных сразу
Есть кучка переменных int a,b,c,d,e и нужно для всех сделать { get; set;} . К сожалению, конструкции: public int a,b,c,d,e { get; set;}...

Могут ли аксессоры свойства иметь различные модификаторы доступа
A) Да B) Нет C) Только аксессор get D) Только аксессор set

Чем отличается private set от set?
Чем отличается private set от set? Зачем это вообще используется?

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru