Есть ли преимущество в использовании свойств перед общедоступными переменными? - PullRequest
3 голосов
/ 14 июня 2011

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

Так что я начал задаваться вопросом, каково было преимущество, и я должен сказать, что в некоторых случаях я понятия не имею вообще.Конечно, это удобно, когда нужно выполнять какую-то другую логику при установке свойств или получении свойств, но есть ли преимущество в использовании свойств, когда вы только получаете / устанавливаете переменную?Пример того, что я имею в виду, показан ниже (As3).

private var _myVariable:SomeClass;

public function get myVariable():SomeClass{
    return _myVariable;
}

public function set myVariable(value:SomeClass):void{
    _myVariable = value;
}

Итак, чтобы повторить и прояснить мой вопрос: есть ли какое-то преимущество в программировании моего геттера / сеттера, как это, или я мог бы просто изменитьпеременная к общедоступной и отбросить геттер / сеттер?

Ответы [ 2 ]

5 голосов
/ 14 июня 2011

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

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

2 голосов
/ 14 июня 2011

Зависит от языка и от того, используется ли ваш код в качестве компонента двоичного другим кодом.Как вы говорите, если вам нужно выполнить некоторую дополнительную логику, вам нужны геттеры / сеттеры, и необходимость в этом может возникнуть в будущем.Итак, вопрос в том, можете ли вы изменить публичную переменную на getter / setters, если возникнет такая необходимость?

Например, в .net двоичная сигнатура свойства отличается от сигнатуры открытого поля.Таким образом, вы не можете изменить поле на свойство, не перекомпилировав код потребителя.Обычно это неприемлемо для компонента, поэтому лучше начать с использования свойств.(Не уверен, как это работает в AS.)

Но если ваш код не используется как компонент, а используется только как часть одного и того же модуля компиляции, это не имеет значения.Просто будьте проще и при необходимости измените var на свойство.

...