10 / 18 / 4
Регистрация: 10.11.2017
Сообщений: 283
|
|
1 | |
Зачем нужны автоматически реализуемые свойства?25.06.2018, 23:56. Показов 3984. Ответов 55
Метки нет (Все метки)
Зачем нужны автоматически реализуемые свойства в c#? Что, нельзя просто пометить поле как public? Зачем надо, чтобы доступ получался только через get и set, если в них нет никаких фильтров, ничего?
0
|
25.06.2018, 23:56 | |
Ответы с готовыми решениями:
55
Автоматически реализуемые свойства Автоматически реализуемые свойства Зачем нужны аргументы , автоматически генерируемые VS? Зачем нужны автоматические свойства? {get; set} |
-7 / 3 / 1
Регистрация: 22.09.2017
Сообщений: 242
|
|
27.06.2018, 12:24 | 21 |
Хорошо, вы делаете проект с простыми свойствами. Выкладываете его в открытый доступ для использования. Затем решаете прикрутить к свойству функцию для ее использования пользователями. Если пользователь не хочет этой функцией пользоваться, то ему что старый проект, что новый - все равно. Если же он захочет такой функцией воспользоваться (узнать сколько раз было обращение к свойству, к примеру), то ему в любом случае придется перекомпилировать свой код. Т.е. только в том случае, если пользователь захочет задействовать ваш новый проект, но не задействовать его новые возможности ему не потребуется компиляция.
Вопрос про замену свойств полями компилятором повторил, т.к. казалось, что где-то читал, что компилятор это делает. Вероятно, ошибся. Спасибо за ответы.
0
|
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
|
|
27.06.2018, 12:40 | 22 |
он продолжает юзать свойство, которое работает ровно так как описано в моих доках.
эта функция (деталь реализации) нужна МНЕ, конечный пользователь вообще не будет в курсе изменений. И не должен вот найдут у вас дыру в безопасности или просто баг критичный, тогда все захотят разом и быстро) Добавлено через 7 минут благо если просто перекомпилировать, а если перестанет компилиться, или сайдэффект будет без предупреждений
0
|
-7 / 3 / 1
Регистрация: 22.09.2017
Сообщений: 242
|
|
27.06.2018, 13:05 | 23 |
Итак, свойства нужны только в том случае, если выполняются сразу:
1. Проект это не вся программа. 2. Проект делается для его использования другими. 3. Если есть предположение повышения безопасности проекта изменением его свойств.
0
|
27.06.2018, 13:20 | 24 |
Свойствами надо делать все, что хоть как-то будет соприкасаться с другими объектами. Помимо вышеописанных выгод, свойства позволяют осуществлять привязку данных, хранящихся в этих свойствах к элементам управления, например.
Приватное поле - это какая-то инфа, влияющая на сугубо внутреннюю реализацию поведения (коэффициенты, констаны, внутренние объекты, и т.д.) Свойства - это одна из самых широко-используемых вещей.
0
|
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
|
|
27.06.2018, 13:31 | 25 |
это буквально пара дополнительных нажатий клавиш, почему надо так долго обосновывать преимущества свойств ради этой пары кликов?
Вопрос из ряда зачем писать качественный код, если его буду видеть только я. Тут мои полномочия всё
0
|
-7 / 3 / 1
Регистрация: 22.09.2017
Сообщений: 242
|
|
27.06.2018, 13:49 | 26 |
Если эти преимущества для данного проекта есть. А если не выполняется что-то из перечисленного 1,2,3? И пара кликов, это только для одного свойства. И скорость чтения кода и скорость нахождения нужного фрагмента: ведь, не только закладками, но и скрулом пользуетесь.
Нет. Вопрос в том, в каких случаях код более качественный, если использовать свойства, а в каких нет. Еще раз спасибо, что помогли разобраться. По делу все понятно, а предпочтения у всех разные.
0
|
17685 / 12871 / 3365
Регистрация: 17.09.2011
Сообщений: 21,136
|
|
27.06.2018, 14:36 | 27 |
Во всех, не связанных с очень редкими ситуациями, где нужно иметь открытое поле для работы с неуправляемым кодом или для интеграции с неуправляемыми системами.
В целом же свойства — это такой же элемент архитектуры, как и классы: они нужны для изоляции деталей реализации. Семантически поле — это деталь реализации, до которой никому кроме автора класса нет дела, а свойство — это элемент взаимодействия с другими типами данных.
0
|
-7 / 3 / 1
Регистрация: 22.09.2017
Сообщений: 242
|
|
27.06.2018, 15:13 | 28 |
Ситуации, когда требуется свойство я описал выше: Зачем нужны автоматически реализуемые свойства?
Я неправ или для вас ситуация, когда код компилируется полностью в программу, а не в модуль для его использования другими очень редкий случай?
0
|
-7 / 3 / 1
Регистрация: 22.09.2017
Сообщений: 242
|
|
27.06.2018, 15:38 | 30 |
Что не позволит в случае надобности заменить поле свойством в случаях не описанных мной?
0
|
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
|
||||||
27.06.2018, 15:53 | 31 | |||||
Ну замените поле Field на свойство, сравните вывод
2
|
17685 / 12871 / 3365
Регистрация: 17.09.2011
Сообщений: 21,136
|
|
27.06.2018, 16:06 | 33 |
1
|
-7 / 3 / 1
Регистрация: 22.09.2017
Сообщений: 242
|
|
27.06.2018, 16:35 | 34 |
Да, пример интересный.
Но для простых типов можете привести пример невозможности превращения поля в свойство, в случае надобности. Кроме уже упомянутых 1,2,3. Или для программ не разбитых на блоки, некоторые из которых предназначены для других пользователей, простые типы не надо заранее объявлять свойствами. Судя по ответам не делать свойства - плохой тон. Но если усомниться в религии?
0
|
17685 / 12871 / 3365
Регистрация: 17.09.2011
Сообщений: 21,136
|
|
27.06.2018, 17:01 | 35 |
Пример со структурой выше — проще некуда.
Заметили бы вы получившийся баг, просто глядя на код? А реальная программа будет состоять из гораздо большего количества кода и баг, как это всегда бывает, всплывет в самый неудачный момент. А багов, связанных с заменой поля на свойство или наоборот — тьма тьмущая. Потому лучше сразу используйте синтаксические конструкции, специально для этого предназначенные. Если вам в начале обучения это не очевидно, то это не повод отказаться от свойств. Лучше "с детства" учиться правильному пользованию инструментом, понимание придет потом — с опытом. В худшем случае использовать поля у вас войдет в привычку, с которой в любой толковой команде вы долго не задержитесь, потому что никому не нужен коллега, лепящий в код бомбы замедленного действия. Дело не в тоне, а в использовании инструментов, созданных для решения определенных задач и в огромном количестве проблем, связанных с неиспользованием этих инструментов. По вопросам религии — это наверное в церковь. Или использование молотка вместо микроскопа для забивания гвоздей — это вопрос религии? Оба ведь тяжелые!
0
|
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
|
|
27.06.2018, 17:02 | 36 |
Сомневаться в религии бывает очень полезно, у вас неплохо получается)
Тогда вам нужно привести аргумент в пользу открытых полей, а то одностороннее получается. И предупреждая возможный аргумент: экономия 2х машинальных нажатий будет съедена временем на придумывание названия переменной.
0
|
309 / 317 / 119
Регистрация: 29.10.2011
Сообщений: 1,006
|
|
27.06.2018, 17:26 | 37 |
Passerby, Хватит в микропримерах а-ля "Привет мир!" искать весь потенциал тех или иных конструкций языка. При этом с минимальным временем жизни проекта. Здесь все хорошо. Но вот только на практике очень часто автосвойста перерастают в обычные свойства с доп проверкой или вызовом методов или еще чем-то. И в этом случае вы просто пересоберёте свой код. Все остальное продолжит работать. А в случае изменения поля на свойства, даже с тем же именем, все сборки, зависящие от вашего класса, нужно будет пересобирать.
Учитесь писать сразу грамотно, а не "вот когда будет большой проект" или "вот когда я буду работать в команде", а пока могу смело ставить паблик поля и, например, пол человека хранить в булевой переменной, а не в перечислении. Почему нет?! Есть паблик ридонли поля. Когда и константа не подходит, ибо значение зависящее, и свойства, ибо тогда для внешнего кода нет гарантии, что значение не изменится.
0
|
-7 / 3 / 1
Регистрация: 22.09.2017
Сообщений: 242
|
|
27.06.2018, 17:38 | 38 |
Я говоря о простых типах имел в виду: https://docs.microsoft.com/ru-... -variables "Типы значений в C# подразделяются на простые типы..."
Так приведите один для простого типа, для случая программы не состоящей из блоков, часть которых предназначен для сторонних пользователей. Во-первых я не высказываюсь в чью-то пользу, а хочу понять. И пока здесь не приведено ни одного аргумента в пользу использования свойств для простых типов для случая программы не состоящей из блоков, часть которых предназначен для сторонних пользователей. Кроме тренировки использования свойств. Только слова "надо"... - это я и называл религией. А во-вторых все же аргументы приводил: Добавлено через 8 минут Хватит в глобальных примерах, а-ля крупнейший проект для концерна с огромным временем жизни, искать шаблоны для применения в других проектах. Участники, судя по количеству просмотров, вопрос темы интересует не только меня. Давайте не начинать флейм.
0
|
17685 / 12871 / 3365
Регистрация: 17.09.2011
Сообщений: 21,136
|
|
27.06.2018, 17:45 | 39 |
Под сторонними пользователями подразумевается не дядя Вася из соседнего отдела, а ваш собственный, написанный вами же код, который тупо перестанет работать.
Чтобы далеко не ходить — банальная сериализация. Если она бинарная, то тип вообще перестанет десериализироваться, т.е. вы потеряете данные. И таких "нюансиков" — море, в зависимости от используемых библиотек. Примеров вам уже на две страницы привели, просто после каждого раза вы добавляете "а если кроме этого?", о чем свидетельствует довольно распухший список "условий". Простые типы в программе, не состоящей из блоков, часть которых не предназначена для сторонних пользователей — это типы в такой программе, которая никому не нужна, даже вам. Т.к. ничего не будет делать, ибо простейший класс — это уже блок, а сторонний пользователь — это ваш же другой класс. Если же у вас вся программа состоит из одного класса, то бога ради — используйте поля. Но и открытыми их в этом случае делать смысла нет. Очень сложно объяснить даже студенту-программисту огромнейшую важность для программиста такого предмета, как дискретная математика. Можно лишь научить и сказать "надо", а озарение придет намного позже — зачастую уже на месте работы. Потому, действительно, на данном этапе просто примите это как "надо".
0
|
-7 / 3 / 1
Регистрация: 22.09.2017
Сообщений: 242
|
|
27.06.2018, 18:54 | 40 |
Действительно каждый раз добавляю : уже набралось: простой тип и проект - программа не разбитая на блоки. Цитату, пожалуйста, из примеров на две страницы.
Когда вы говорили о блоках, в которых применение свойств не вызывает сомнений, речь шла не о всех классах, из которых состоит программа, а из тех которые скомпилированы и замена полей на свойства потребует их перекомпиляции. Сейчас же вы называете тем же словом и классы не вынесенные в скомпилированный блок. Это называется подмена понятий. Или вы считаете, что программа не составленная из несколько скомпилированных блоков никому не нужна? Сильный аргумент.
0
|
27.06.2018, 18:54 | |
27.06.2018, 18:54 | |
Помогаю со студенческими работами здесь
40
Зачем нужны методы? Зачем нужны get и set? Зачем в C# нужны указатели Зачем нужны интерфейсы? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |