Свойства против методов

124
задан Chuck Conway 2 March 2009 в 09:47
поделиться

13 ответов

От раздел Choosing Between Properties и Methods Руководства по проектированию для Разработки Библиотек классов:

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

130
ответ дан FriendlyGuy 2 March 2009 в 09:47
поделиться

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

3
ответ дан Marcus L 2 March 2009 в 09:47
поделиться

Вы должны только посмотреть на самое имя... "Свойство". Что это означает? словарь определяет его во многих отношениях, но в этом случае "существенный или отличительный атрибут или качество вещи" подходят лучше всего.

Думают о цели действия. Вы, на самом деле, изменяясь или получая "существенный или отличительный атрибут"? В Вашем примере Вы используете функцию для установки свойства текстового поля. Это кажется довольно глупым, он нет?

Свойства действительно являются функциями. Они все компилируют вниз в getXXX () и setXXX (). Это просто скрывает их в синтаксическом сахаре, но это - сахар, который предоставляет семантическое значение процессу.

Думают о свойствах как атрибуты. Автомобиль имеет много атрибутов. Цвет, MPG, Модель, и т.д. Не все свойства являются устанавливаемыми, некоторые calculatable.

Между тем, Метод является действием. GetColor должен быть свойством. GetFile () должен быть функцией. Другое эмпирическое правило, если оно не изменяет состояние объекта, тогда это должна быть функция. Например, CalculatePiToNthDigit (n) должен быть функцией, потому что он на самом деле не изменяется, состояние Математики возражают, что он присоединен.

Это, возможно, околачивается немного, но это действительно сводит к решению, что Ваши объекты, и что они представляют. Если Вы не можете выяснить, должно ли это быть свойство или функция, возможно, это не имеет значения который.

8
ответ дан Erik Funkenbusch 2 March 2009 в 09:47
поделиться

Свойства должны только быть простым набором и получить лайнеры. Что-либо больше и это должно действительно быть перемещено в метод. Сложный код должен всегда быть в методах.

3
ответ дан Duke of Muppets 2 March 2009 в 09:47
поделиться
  • 1
    По крайней мере, с начальной загрузкой 3 это только работало на меня после добавления !important к width: auto – geekQ 6 March 2014 в 16:43

Как дизайн Свойства представляют Данные или Атрибуты объекта класса, В то время как методы являются действиями или поведениями объекта класса.

В .NET, мир там является другими последствиями использования Свойств:

  • Свойства используются в Привязке данных, в то время как get_ / set_ методы не.
  • свойства пользователя сериализации XML как естественный механизм serilization.
  • к Свойствам получают доступ управление PropertyGrid и интернируют ICustomTypeDescriptor, который может использоваться эффективно, если Вы пишете пользовательскую библиотеку.
  • Свойствами управляют Атрибуты , можно использовать его мудро для разработки программного обеспечения Aspect Oriented.

Неправильные представления (по моему скромному мнению), об использовании Свойств:

  • Используемый для представления маленьких вычислений: ControlDesigner. SelectionRules добирается, блок сталкивается с 72 строками!!
  • Используемый для представления внутренних Структур данных: Даже если свойство не отображается на внутренний элемент данных, можно использовать его в качестве свойства, если атрибут Вашего класса. Наоборот, даже если атрибут Ваших свойств класса не желателен к возвращаемому массиву как элементы данных (вместо этого, методы используются для возврата глубокой копии участников.)

В примере здесь это, возможно, было записано с большим бизнесом, означающим как:

public String Title
{
    set { Label.Text = text; }
}
2
ответ дан NileshChauhan 2 March 2009 в 09:47
поделиться

При установке фактического свойства объекта тогда, Вы используете свойство.

при выполнении задачи / функциональность тогда, Вы используете метод.

В Вашем примере, это - определенное устанавливаемое свойство.

, Если бы однако, Ваша функциональность была к AppendToLabel тогда, Вы использовали бы метод.

12
ответ дан Robin Day 2 March 2009 в 09:47
поделиться

Свойства являются способом ввести или получить данные из объекта. Они создают абстракцию по переменным или данным в классе. Они походят на методов get и методы set в Java.

Методы инкапсулируют операцию.

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

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

В Вашем примере кода я обернул бы его в свойство, если я должен получить доступ к нему снаружи, это содержит класс:

public Label Title 
{
   get{ return titleLabel;}
   set{ titleLabel = value;}
}

Установка текста:

Title.Text = "Properties vs Methods";

, Если бы я только устанавливал текстовое свойство Маркировки, это - то, как я сделал бы это:

public string Title 
{
   get{ return titleLabel.Text;}
   set{ titleLabel.Text = value;}
}

Установка текста:

Title = "Properties vs Methods";
12
ответ дан Chuck Conway 2 March 2009 в 09:47
поделиться

Да, если все, что Вы делаете, получает и устанавливает, используйте свойство.

при выполнении чего-то сложного, которое может влиять на несколько элементов данных, метод является более соответствующим. Или если Ваш метод get берет параметры, или Ваш метод set берет больше, чем параметр, передаваемый по значению.

В середине серая область, где грань может быть немного стерта. Нет никакого жесткого правила, и различные люди будут иногда не соглашаться, должно ли что-то быть свойством или методом. Важная вещь состоит в том, чтобы только (относительно) согласовываться с тем, как Вы делаете это (или как Ваша команда делает это).

Они являются в основном взаимозаменяемыми, но свойство предупреждает пользователя, что реализация относительно "проста". О, и синтаксис является немного более чистым.

Вообще говоря, моя философия - то, что, если Вы начинаете писать имя метода, которое начинается, получают или устанавливают, и берет нуль или один параметр (соответственно) тогда, это - главный кандидат на свойство.

52
ответ дан cletus 2 March 2009 в 09:47
поделиться

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

Они используют использоваться, были Вы, просто устанавливают и добираются и возможно некоторая проверка, которая не получает доступ к существенному объему кода. Будьте осторожны, потому что создание сложных объектов во время проверки не просто.

Что-либо еще методы являются предпочтительным путем.

Это не примерно семантика. Используя свойства несоответствующий запуск, имеющий странность, происходят в Visual Studio визуальный разработчик.

, Например, я получал значение конфигурации в свойстве класса. Класс конфигурации на самом деле открывает файл и выполняет запрос SQL для получения значения той конфигурации. Это вызвало проблемы в моем приложении, где конфигурационный файл открыть и заблокировал самой Visual Studio, а не моим приложением, потому что не только читал, но писал значение конфигурации (через метод установщика). Для фиксации этого, я просто должен был изменить его на метод.

2
ответ дан Jeremy Edwards 2 March 2009 в 09:47
поделиться

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

3
ответ дан abatishchev 2 March 2009 в 09:47
поделиться

Свойства Symantically являются атрибутами Ваших объектов. Методы являются поведениями Вашего объекта.

Маркировка является атрибутом, и имеет больше смысла делать это свойством.

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

Автомобиль {Цвет, Модель, Бренд}

автомобиль А имеет Цвет, Модель и атрибуты Бренда поэтому, не имеет смысла иметь метод SetColor или SetModel, потому что symantically мы не просим, чтобы Автомобиль выбрал свой собственный цвет.

Поэтому, если Вы отображаете случай свойства/метода на реальный объект или смотрите на него от symantic точки наблюдения, Ваш беспорядок действительно уйдет.

9
ответ дан Muhammad Hasan Khan 2 March 2009 в 09:47
поделиться
  • 1
    +1 < th разрабатывают =" ширина: 5%;" > Title</th> работавший обработка для меня – Sam Holguin 22 October 2013 в 19:14

При поиске в MSDN я нашел ссылку на Свойства и методы , в которой даются некоторые отличные рекомендации по созданию методов:

  • Операция представляет собой преобразование, например Object.ToString .
  • Операция достаточно дорогостоящая, поэтому вы хотите передать ее пользователь, который им следует рассмотреть кеширование результат.
  • Получение значения свойства с помощью метода доступа get будет иметь наблюдаемый побочный эффект.
  • Вызов элемента дважды подряд дает разные результаты.
  • Порядок выполнения важен. Обратите внимание, что свойства типа должны возможность установки и извлечения в любом порядок.
  • Элемент является статическим, но возвращает значение, которое можно изменить.
  • Элемент возвращает массив. Свойства, возвращающие массивы, могут быть очень вводит в заблуждение. Обычно это необходимо вернуть копию внутренний массив, чтобы пользователь не мог изменить внутреннее состояние. Это вместе с тем, что пользователь может легко предположим, что это индексированное свойство, приводит к неэффективному коду.
10
ответ дан 24 November 2019 в 01:06
поделиться

Я пришел с Java и какое-то время использовал метод get .. set ..

Когда я пишу код, я не спрашиваю себя: «Доступ к этим данным прост или требует сложного процесса?» потому что все может измениться (сегодня получить это свойство просто, завтра может потребоваться какой-то или тяжелый процесс).

Сегодня у меня есть метод SetAge (int age), завтра у меня будет также метод SetAge (дата рождения, дата), который вычисляет возраст, используя дату рождения.

Я был очень разочарован тем, что свойство компилятора преобразовать в get и set, но не считает мои методы Get ... и Set .. одинаковыми.

-1
ответ дан 24 November 2019 в 01:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: