Свойства vs переменные классов
Свойство это функциональная абстракция данных. В чем преимущества использования свойств по сравнению с прямым доступом к полю объекта?
- Свойство — единственный способ определить поле в интерфейсе;
- Свойство позволяет реализовать асинхронное изменение значения поля объекта;
- Использование свойств позволяет использовать механизм привязки к данным (binding);
- Использование свойств при Remoting приводит к вызову метода прокси-класса, в то время как использование явного доступа к полю класса, в случае Remoting взаимодействия, приведет к генерации исключения;
- Абстракция реализации. Свойство может быть виртуальным, поле — нет;
- Возможность реализовать доступ только для чтения. В случае прямого доступа к полю объекта такой возможности нет;
- Возможность реализовать различную функциональность для внутренних и внешних вызовов;
- Возможность обеспечить различный уровень доступа для чтения и записи значения свойства
public string Name { get; protected set; }
Недостаток использования свойств один — накладные расходы на вызов функции или, в том случае, когда свойство является вирутальным, виртуальной функции. Кроме того, свойства не поддерживают initonly инициализацию, т.е. когда значение инициализируется в конструкторе объекта и впоследствии не может быть изменено.