Определение публичной собственности - PullRequest
4 голосов
/ 08 июля 2010

Каковы преимущества определения свойства объекта вместо предоставления прямого доступа к закрытой переменной?

Вместо:

public class A

    private _x as integer = 0

    Public property X() as integer
        Get
            return _x

        End Get
        Set(ByVal value As integer)
            _x = value
        End Set
    End Property

end class

Почему мы не можем сделать следующее:

public class A

    public _x as integer = 0

end class

Каковы преимущества?

Ответы [ 2 ]

5 голосов
/ 08 июля 2010

Одним из преимуществ является то, что ряд платформ ищет свойства класса для привязки, а не для полей.Таким образом, непосредственное предоставление поля _x вызовет некоторые головные боли, когда вы задаетесь вопросом, почему среда не устанавливает значение так, как вы могли бы ожидать.

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

1 голос
/ 08 июля 2010

Основная причина заключается в том, что вы можете добавить поведение (ведение журнала, проверку, базу данных и т. Д.) К свойству позже, не изменяя ABI (двоичный интерфейс приложения).Если бы вы определили его как поле, а затем хотели добавить поведение, вам нужно было бы перейти к свойству (или методу).Любой из них потребует перекомпиляции другого кода (и изменения, если вы пошли по пути метода).

...