Свойства обеспечивают контролируемый доступ к данным;самое простое, это может означать просто инкапсуляцию поля (публичные поля не рекомендуются), что компилятор может упростить для вас:
public int Foo {get;set;} // the compiler handles the field for you
Однако вы можете использовать свойство для принудительного применения логики илиобрабатывать побочные эффекты:
private int foo;
public int Foo {
get { return foo; }
set {
if(value < 0) throw new ArgumentOutOfRangeException();
if(value != foo) {
foo = value;
OnFooChanged(); // fire event notification for UI bindings
}
}
}
Другими распространенными опциями являются отложенная загрузка, вычисляемые члены, прокси-члены и т. д.
Вы также можете изменить доступность, например:
public int Foo { get; protected set; }
, который может быть назначен только по типу и подклассам, но не по несвязанному коду.Кроме того, может иметь только get или set.
По сути, свойства действуют как более формальная версия пары get / set методов , что делает его намного прощеговорить о «Foo», а не о «get_Foo» / «set_Foo» и т. д. (для двусторонней привязки).
В отличие от полей, свойства также могут быть объявлены на интерфейсах, что важно для кода на основе интерфейса