общедоступные переменные по сравнению с частными переменными со средствами доступа

определить метод, аналогичный «равному» для вашего класса, и в конечной точке проверить существующий_объект.check (receiveObject), добавить импорт java.util.Objects в ваш класс

public boolean check(Object o) {
    if (this == o) {
        return true;
    }
    if (o == null || getClass() != o.getClass()) {
        return false;
    }
    RecievedObject receivedObject=(RecievedObject) o;

   //add based on the logic you want
    return Objects.equals(location, receivedObject.location) &&
            Objects.equals(name, receivedObject.name);
}
24
задан Kevin 3 October 2008 в 18:38
поделиться

10 ответов

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

Примечание, что с C# 3.0, можно реализовать свойство, не создавая отступающее поле, например:

public string Name { get; set; }

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

36
ответ дан 28 November 2019 в 22:37
поделиться

При определении открытого интерфейса со свойством в блоке A Вы могли бы тогда использовать этот интерфейс в блоке B.

Теперь, можно изменить реализацию свойства (возможно, выбирающий значение от базы данных вместо того, чтобы хранить его в поле). Тогда можно перекомпилировать блок A и заменить более старый. Блок B продолжился бы прекрасный, потому что интерфейс не будет изменяться.

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

Так, Вы - более обеспеченный запуск со свойства первоначально. Это инкапсулирует реализацию свойства, оставлять Вас освобождает для изменения его в будущем, не имея необходимость волновать, какие клиенты (включая блок B) уже отсутствуют в мире с помощью блока A. Поскольку, если бы существуют какие-либо клиенты уже в мире, использующем блок A, изменяя интерфейс, повредил бы все клиенты. Если они используются другой командой в Вашей компании или другой компании, то они собираются быть не счастливыми, если Вы повреждаете их блоки путем изменения вашего интерфейса!

13
ответ дан 28 November 2019 в 22:37
поделиться

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

6
ответ дан 28 November 2019 в 22:37
поделиться

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

6
ответ дан 28 November 2019 в 22:37
поделиться

Хорошая практика программирования. Это - очень общий шаблон, который соответствует методологиям проектирования OO. Путем представления общедоступного поля Вы представляете внутренности того, как те данные хранятся. Используя общественную собственность вместо этого позволяет Вам больше гибкости для изменения способа, которым данные хранятся внутренне, и не повреждают открытый интерфейс. Это также позволяет Вам больше управления тем, что происходит, когда к данным получают доступ (ленивая инициализация, пустые проверки, и т.д.)

3
ответ дан 28 November 2019 в 22:37
поделиться

Переменные являются частью реализации класса. Свойства более логически представляют интерфейс ему. С C# 3.0 автоматически реализованные свойства делают это бризом, чтобы сделать от запуска.

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

2
ответ дан 28 November 2019 в 22:37
поделиться

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

0
ответ дан 28 November 2019 в 22:37
поделиться

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

0
ответ дан 28 November 2019 в 22:37
поделиться

Для инкапсуляции не рекомендуется использовать общедоступные поля.

в http://my.safaribooksonline.com/9780321578815/ch05lev1sec5?displaygrbooks=0

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

0
ответ дан 28 November 2019 в 22:37
поделиться

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

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

0
ответ дан 28 November 2019 в 22:37
поделиться
Другие вопросы по тегам:

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