Если вы спрашиваете, почему вы используете свойства или автоматические свойства, это философия дизайна, лежащая в основе этого.
Один важный принцип дизайна заключается в том, что вы никогда не выставляете поля как общедоступные, носкорее всегда получить доступ ко всему через свойства.Это потому, что вы никогда не можете сказать, когда к полю обращаются, и, что более важно, когда оно установлено.В большинстве случаев при настройке или получении значения не требуется никакой обработки (например, проверка диапазона).Вот почему автоматические свойства были созданы.Это простой способ создания свойства в одну строку.Резервное хранилище для него создается компилятором.
Хотя это то, что я делаю даже для своих внутренних программ, оно, вероятно, более важно для тех, которые предназначены для публичного использования (для продажи, с открытым исходным кодом и т. Д.).Если вы используете автоматическое свойство, а затем решите, что вам нужно сделать что-то еще в set
или get
, вы можете легко изменить свой код, не нарушая общедоступный интерфейс.
Обновление
В качестве пояснения к комментарию ниже, если весь код принадлежит вам, то нет, он может не иметь большого значения для свойства и поля для вас.Но если вы разрабатываете библиотеку, которая будет использоваться другими, то переключение между открытыми полями и свойствами будет вызывать исключения, если код, использующий библиотеку, не будет перекомпилирован в первую очередь.
В качестве теста я создалпроект библиотеки и объявил свойство под названием TestData
.Я создал целый новый проект только для использования этой библиотеки.Все работало как положено.Затем я изменил свойство на открытое поле (имя осталось прежним) и скопировал новую библиотеку DLL без перекомпиляции потребляющего проекта.В результате возникло исключение, так как код ожидал найти методы свойств методов get_TestData
и set_TestData
, но поля не доступны через методы.
Unhandled Exception: System.MissingMethodException: Method not found: 'Void TestLibrary.TesterClass.set_TestData(System.String)'.
at TestLibraryConsumer.Program.Main(String[] args)