Автоматически Реализуемые Свойства c # - PullRequest
11 голосов
/ 25 мая 2010
  1. Может кто-нибудь объяснить мне, в чем заключается идея использования автоматически реализуемых свойств c #?

    public class Customer
    {
        public int ID { get; set; }
        public string Name { get; set; }
    }
    

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

  2. Есть ли разница между определением поля как "public const" или определением его как свойства только для получения?

Ответы [ 6 ]

16 голосов
/ 25 мая 2010

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

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

5 голосов
/ 25 мая 2010

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

3 голосов
/ 25 мая 2010

Автоматически реализованные свойства по сути являются синтаксическим сахаром. После компиляции резервное хранилище существует. Он просто недоступен из исходного кода.

Как уже говорили другие, свойства и поля не эквивалентны. Поля и свойства несовместимы, поэтому изменение между ними является серьезным изменением. Кроме того, вы не можете использовать привязку данных к полям.

Финальная точка. Хотя в вашем случае есть небольшая функциональная разница между примером и открытым полем, вы можете изменить видимость одного из методов доступа. Итак, чтобы создать свойство только для чтения с использованием автоматического свойства, вы можете сделать что-то вроде:

public int ID { get; private set; }

В этом случае средство доступа get является общедоступным согласно всей подписи, но средство доступа set является частным.

2 голосов
/ 25 мая 2010

Я позволю MSDN говорить здесь ...

"В C # 3.0 и более поздних версиях автоматически реализуемые свойства делают объявление свойства более кратким, когда в средствах доступа к свойствам не требуется дополнительная логика. Они также позволяют клиентскому коду создавать объекты. Когда вы объявляете свойство, как показано в следующем примере (см., например, статью MSDN), компилятор создает частное анонимное поле поддержки, к которому можно получить доступ только через методы доступа get и set свойства "

Вероятно, наиболее выгодным отличием является то, что вы можете сделать до / после проверки, поднять PropertyChanged событий и т. Д.

Есть ли разница между определением поля как "public const" или определением его как свойства только для получения?

Да, поле только для получения должно иметь объявление частного поля. Это поле может быть изменено классом внутри, помечая поле как const, означает, что оно не может быть изменено.

1 голос
/ 25 мая 2010

2: открытый констант должен быть определен во время компиляции, вы не можете использовать ссылочные объекты для этого. Только классы, которые наследуются от System.ValueType (string, int, double, ...)

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

0 голосов
/ 25 мая 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...