Быстрый вопрос: когда вы решили использовать свойства (в C #) и когда вы решили использовать методы?
Мы заняты, имеющие эту дискуссию и обнаружили несколько областей, где это спорно, стоит ли использовать свойство или метод. Один из примеров:
public void SetLabel(string text)
{
Label.Text = text;
}
В этом примере Label
это элемент управления на странице ASPX. Существует ли принцип, который может регулировать решение (в данном случае), делать ли это методом или свойством.
Я приму ответ, который является наиболее общим и всеобъемлющим, но также затрагивает приведенный мной пример.
c#
properties
methods
Trumpi
источник
источник
if()
проверки (согласно MSDN). Но это сложно, поскольку пользователь не всегда осознает стоимость обработки доступа к переменной (свойству) (т. Е. Код недоступен), и по соображениям строгости нужно будет сравнить свойство. Да, и «бонус», вы не можете использовать указатели со свойствами.Ответы:
Из раздела « Выбор между свойствами и методами » Руководства по разработке библиотек классов:
источник
Да, если все, что вы делаете, это получение и настройка, используйте свойство.
Если вы делаете что-то сложное, что может повлиять на несколько элементов данных, метод является более подходящим. Или если ваш геттер принимает параметры или ваш сеттер принимает больше, чем параметр значения.
В середине - серая область, где линия может быть немного размытой. Не существует жесткого и быстрого правила, и разные люди иногда не соглашаются, должно ли что-то быть свойством или методом. Важно просто (относительно) соответствовать тому, как вы это делаете (или как ваша команда это делает).
Они в значительной степени взаимозаменяемы, но свойство сигнализирует пользователю, что реализация относительно «проста». Ох, и синтаксис немного чище.
Вообще говоря, моя философия заключается в том, что если вы начнете писать имя метода, которое начинается с get или set и принимает ноль или один параметр (соответственно), то это основной кандидат на свойство.
источник
Свойства - это способ ввода или извлечения данных из объекта. Они создают абстракцию над переменными или данными внутри класса. Они аналогичны геттерам и сеттерам в Java.
Методы инкапсулируют операцию.
В общем, я использую свойства для предоставления отдельных бит данных или небольших вычислений для класса, например, налога с продаж. Который выводится из количества предметов и их стоимости в корзине.
Я использую методы при создании операции, например, получение данных из базы данных. Любая операция, имеющая движущиеся части, является кандидатом в метод.
В вашем примере кода я бы обернул его в свойство, если мне нужно получить доступ к нему вне класса, в котором он содержится:
Установка текста:
Если бы я только устанавливал свойство Text метки, я бы так и сделал:
Установка текста:
источник
Если вы устанавливаете фактическое свойство вашего объекта, тогда вы используете свойство.
Если вы выполняете задачу / функциональность, тогда вы используете метод.
В вашем примере это определенное свойство, которое устанавливается.
Однако, если ваша функциональность заключается в AppendToLabel, то вы будете использовать метод.
источник
Просматривая в MSDN, я нашел ссылку на Свойства по сравнению с Методами, в которой приведены некоторые отличные рекомендации по созданию методов:
источник
Вам нужно только взглянуть на само название ... "Собственность". Что это означает? Словарь определяет его по-разному, но в этом случае «существенный или отличительный признак или качество вещи» подходит лучше всего.
Подумайте о цели действия. Вы на самом деле изменяете или восстанавливаете «существенный или отличительный признак»? В вашем примере вы используете функцию для установки свойства текстового поля. Это выглядит глупо, не правда ли?
Свойства действительно являются функциями. Все они компилируются в getXXX () и setXXX (). Он просто скрывает их в синтаксическом сахаре, но именно сахар придает процессу смысл.
Думайте о свойствах как об атрибутах. У машины много атрибутов. Цвет, MPG, модель и т. Д. Не все свойства являются настраиваемыми, некоторые являются расчетными.
Между тем, Метод - это действие. GetColor должен быть свойством. GetFile () должен быть функцией. Еще одно практическое правило: если это не меняет состояние объекта, то это должна быть функция. Например, CalculatePiToNthDigit (n) должна быть функцией, потому что она фактически не меняет состояние объекта Math, к которому она присоединена.
Возможно, это немного бессвязно, но на самом деле все сводится к тому, чтобы решить, какие у вас объекты и что они представляют. Если вы не можете понять, должно ли это быть свойство или функция, возможно, не имеет значения, какой именно.
источник
Симметрично свойства являются атрибутами ваших объектов. Методы - это поведение вашего объекта.
Метка является атрибутом, и имеет смысл сделать его свойством.
С точки зрения объектно-ориентированного программирования у вас должно быть четкое понимание того, что является частью поведения, а что - просто атрибутом.
Автомобиль {Цвет, Модель, Марка}
У автомобиля есть атрибуты Color, Model и Brand, поэтому не имеет смысла иметь метод SetColor или SetModel, потому что мы не просим Car установить свой собственный цвет.
Поэтому, если вы сопоставите случай свойства / метода с реальным объектом или посмотрите на него с точки зрения смысла, ваша путаница действительно исчезнет.
источник
Также большим плюсом для Properties является то, что значение свойства можно увидеть в Visual Studio во время отладки.
источник
Я предпочитаю использовать свойства для методов добавления / установки с 1 параметром. Если параметров больше, используйте методы.
источник
Свойства должны быть просто заданы и получать один вкладыш. Что-нибудь еще, и это действительно должно быть перенесено в метод. Сложный код всегда должен быть в методах.
источник
Я использую свойства только для доступа к переменным, то есть для получения и установки отдельных переменных или для получения и установки данных в элементах управления. Как только какая-либо манипуляция с данными требуется / выполняется, я использую методы.
источник
С точки зрения дизайна, свойства представляют данные или атрибуты объекта класса, а методы - действия или поведения объекта класса.
В .Net, мире есть и другие последствия использования свойств:
Заблуждения (IMHO) об использовании свойств:
В приведенном здесь примере это могло бы быть написано с большим деловым значением как:
источник
Свойства действительно хороши, потому что они доступны в визуальном дизайнере Visual Studio, если они имеют доступ.
Они используются, если вы просто устанавливаете и получаете, и, возможно, некоторую проверку, которая не дает доступа к значительному объему кода. Будьте осторожны, потому что создание сложных объектов во время проверки не является простым.
Любые другие методы являются предпочтительным способом.
Это не только семантика. Использование неуместных свойств может привести к появлению странностей в визуальном дизайнере визуальной студии.
Например, я получал значение конфигурации в свойстве класса. Класс конфигурации фактически открывает файл и запускает SQL-запрос, чтобы получить значение этой конфигурации. Это вызвало проблемы в моем приложении, когда файл конфигурации открывался и блокировался самой Visual Studio, а не моим приложением, потому что он не только считывал, но и записывал значение конфигурации (через метод setter). Чтобы исправить это, я просто должен был изменить его на метод.
источник
Вот хороший набор рекомендаций по использованию свойств по сравнению с методами Билла Вагнера.
Повторные вызовы для установщика (с тем же значением) не должны давать различий от одного вызова.
Метод get не должен возвращать ссылку на внутренние структуры данных (см. Пункт 23). Метод может вернуть глубокую копию и избежать этой проблемы.
* Взято из моего ответа на дубликат вопроса.
источник
Это просто
1: использовать свойство, если вы хотите, чтобы ваши данные были проверены перед сохранением в поле. Таким образом, свойство обеспечивает инкапсуляцию для ваших полей. Потому что, если вы оставите свои поля, публичный конечный пользователь может назначить любое значение, которое может или не может быть действительным, согласно вашему бизнес-требованию, например, возраст должен быть больше 18. Поэтому, прежде чем значение сохранит соответствующее поле, мы должны проверить его действительность. Таким образом, свойства представляют данные.
2: Используйте метод, когда вы хотите выполнить какое-то действие, например, вы предоставляете некоторые данные в качестве параметра, а ваш метод выполняет некоторую обработку на основе предоставленных значений и возвращает обработанное значение в качестве вывода. Или вы хотите изменить значение некоторого поля этим расчетом. «Таким образом, метод представляет действие».
источник
Я пришел из Java и я использовал метод get .. set .. на некоторое время.
Когда я пишу код, я не спрашиваю себя: «Доступ к этим данным прост или требует тяжелого процесса?» потому что все может измениться (сегодня восстановить это свойство просто, завтра может потребоваться какой-то или тяжелый процесс).
Сегодня у меня есть метод SetAge (int age), завтра у меня будет также метод SetAge (дата рождения), который вычисляет возраст, используя дату рождения.
Я был очень разочарован тем, что компилятор преобразовал свойство в get и set, но не считаю мои методы Get ... и Set .. одинаковыми.
источник