Статические свойства
Статические свойства
В C# также поддерживаются статические свойства. Вспомните из главы 3, что статические члены доступны на уровне класса, а не экземпляра (объекта) этого класса. Например, предположим, что тип Employee определяет элемент статических данных, представляющий название организации, в которой трудоустроен работник. Можно определить статическое свойство (например, уровня класса) так, как показано ниже.
// Статические свойства должны оперировать со статическими данными!
public class Employee {
private static string companyName;
public static String Company {
get { return companyName; }
set { companyName = value; }
}
…
}
Статические свойства используются точно так же, как статические методы.
// Установка и чтение названия компании,
// в которой трудоустроены эти работники…
public static int Main(string[] args) {
Employee.Company = "Intertech training";
Console.WriteLine("Эти люди, работают в {0} ", Employee.Company);
…
}
Также вспомните из главы 3, что в C# поддерживаются статические конструкторы. Поэтому, если вы хотите, чтобы статическое свойство companyName всегда устанавливалось равным Intertech Training, можете добавить в класс Employee член следующего вида.
// Статический конструктор без модификаторов доступа и аргументов.
public class Employee {
…
static Employee() {
companyName = "Intertech Training";
}
}
В данном случае мы ничего не выиграли в результате добавления статического конструктора, если учесть, что тот же результат можно было бы достичь с помощью простого присваивания значения члену-переменной companyName, как показано ниже.
// Статические свойства должны оперировать со статическими данными!
public class Employee {
private static string companyName = "Intertech Training";
}
Однако следует вспомнить о том. что статические конструкторы оказываются очень полезными тогда, когда значения для статических данных становятся известны только в среде выполнения (например, при чтении из базы данных).
В завершение нашего обзора возможностей инкапсуляции следует подчеркнуть, что свойства используются с той же целью, что и классическая пара методов чтения/модификации данных. Преимущество свойств заключается в том, что пользователи объекта получают возможность изменять внутренние данные, используя для этого один именованный элемент.