#c# #.net #properties #accessor #automatic-properties
#c# #.net #свойства #средство доступа #автоматические свойства
Вопрос:
Есть ли какой-либо недостаток в том, чтобы позволить C # создавать частные резервные поля, которые генерируются с помощью автоматического создания свойств (т. Е. {get; set})?
Я знаю, что это происходит автоматически, и поэтому вы не можете настроить get / set, и хотел бы знать, есть ли какие-либо другие последствия.
Спасибо!
Комментарии:
1. На самом деле это не проблема. Вы можете легко преобразовать автоматическое свойство в ручное позже, если обнаружите, что вам нужна та или иная функция. Это не кардинальное изменение.
Ответ №1:
Самая большая проблема, с которой я столкнулся, заключается в том, что это часто очень ограничивает при просмотре сценариев привязки. Обычно при использовании привязки данных вам необходимо реализовать INotifyPropertyChanged, который не поддерживается автоматическими свойствами.
Ответ №2:
Если вы используете BinaryFormatter
, изменение на автоматически реализуемые свойства (или из них) является решающим изменением, поскольку имена полей имеют значение для BF. Конечно, есть одно простое решение: не используйте BF!
Вы также не можете добавлять атрибуты в поле поддержки, используя автоматические свойства.
Нет инициализаторов полей.
Нет true readonly
для использования с неизменяемостью.
Очевидно, что вы не можете добавить логику; нет лени, проверки, побочных эффектов или событий уведомления.
При использовании структур вам нужно вызывать :this()
пользовательские конструкторы, что некрасиво.
В остальном: они великолепны. Я большой поклонник.
Ответ №3:
Самая большая проблема заключается в том, что вы не можете работать с резервными полями, поскольку они создаются компилятором. Это означает, что вы не можете объявлять их const или только для чтения, это означает, что вы не можете добавить логику для доступа к ним (отложенная инициализация, например) и т.д. Хорошей новостью является то, что запуск с autoproperty упрощает рефакторинг с использованием резервного поля, когда у вас есть на то причина.