-
может кто-нибудь объяснить мне, что идея использования Auto-Implemented Properties С#?
public class Customer { public int ID { get; set; } public string Name { get; set; } }
Я получаю мотивацию использовать свойства для частного поля, поэтому мы можем определить, как можно получить доступ к частному полю. Но здесь - это точно так же, как определение поля для публики с первого места. нет?
-
Есть ли разница между определением поля как "public const" или определением его свойства get-only?
Автоматически реализованные свойства С#
Ответ 1
Открытое автоматическое свойство - это не то же самое, что и публичное поле, оно не является бинарным. Если вы реализуете публичное поле, а затем хотите добавить некоторую логику, вам придется изменить его на свойство и тем самым внести изменения в разрыв (из-за двоичной несовместимости). Вот почему многие соглашения утверждают, что вы никогда не должны открывать публичные поля, а используете свойства.
Таким образом, автоматические свойства являются просто удобной отправной точкой для любого простого элемента неклассифицированного класса, позволяющего позже добавлять логику при сохранении бинарной совместимости.
Ответ 2
Свойства могут быть привязкой данных, тогда как поля не могут.
Ответ 3
Автоматически реализованные свойства представляют собой, по существу, синтаксический сахар. После компиляции существует резервное хранилище. Он просто не доступен из исходного кода.
Как утверждали другие, свойства и поля не эквивалентны. Поля и свойства несовместимы, поэтому изменение между ними является нарушением изменений. Кроме того, вы не можете использовать привязку данных к полям.
Конечная точка. Хотя в вашем случае существует небольшая функциональная разница между примером и публичным полем, вы можете изменить видимость одного из аксессуаров. Итак, чтобы создать свойство "только для чтения" с использованием автоматического свойства, вы можете сделать что-то вроде:
public int ID { get; private set; }
В этом случае get accessor является общедоступным, как и для всей сигнатуры, но доступный для доступа элемент является закрытым.
Ответ 4
Я позволю MSDN поговорить здесь....
"В С# 3.0 и более поздних версиях автоматически реализованные свойства упрощают декларацию свойств, когда в аксессуарах свойств не требуется дополнительная логика. Они также позволяют клиентскому коду создавать объекты. Когда вы объявляете свойство, как показано ниже пример (см. например, статью MSDN), компилятор создает закрытое, анонимное поле поддержки, доступ к которому можно получить только через свойство get и set accessors"
Вероятно, самое выгодное различие заключается в том, что вы можете выполнить предварительную проверку, повысить PropertyChanged
события и т.д.
Есть ли разница между определением поля как "public const" или определением его свойства get-only?
Да, поле get-only должно иметь объявление частного поля. Это поле может быть изменено классом внутри, маркировка поля как const означает, что он не может быть изменен.
Ответ 5
2: public comp должен быть определен в compiletime, вы не можете использовать для этого ссылочные объекты. Только классы, наследующие от System.ValueType(строка, int, double,...)
A const также является статическим, тогда как свойство с только получателем не является (каждый класс имеет свой собственный экземпляр.)
Ответ 6
Относительно 1: Рекомендуется использовать автоматически реализованные свойства, потому что позже вы можете реализовать дополнительную логику, не нарушая изменений. Пример этого можно найти в Изучении автоматических реализованных свойств