Книга: ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание
Синтаксис инициализации членов-переменных
Синтаксис инициализации членов-переменных
Типы класса обычно имеют множество членов-переменных (также называемых полями). Если в классе можно определять множество конструкторов, то может возникнуть не слишком радующая программиста необходимость многократной записи одного и того же программного кода инициализации для каждой новой реализации конструктора. Это вполне реально, например, в том случае, когда вы не хотите принимать значение члена, предусмотренное по умолчанию. Так, чтобы член-переменная (myInt) целочисленного типа всегда инициализировался значением 9, вы можете записать следующее.
// Все это хорошо, но такая избыточность…
class Test {
public int myInt;
public string myString;
public Test() {myInt = 9;}
public Test(string s) {
myInt = 9;
myString = s;
}
}
Альтернативой может быть определение вспомогательной функции, вызываемой всеми конструкторами. При этом уменьшается общее число повторений для операции присваивания, но теперь возникает следующая избыточность,
// Все равно остается избыточность…
class Test {
public int myInt;
public string myString;
public Test() {InitData();}
public Test(string s) {
myString = s;
InitData();
}
private void InitData() {myInt = 9;}
}
Оба эта подхода вполне легитимны, но в C# позволяется назначать членам типа начальные значения в рамках деклараций (вы, наверное, знаете, что другие объектно-ориентированные языки [например, C++], не позволяют такую инициализацию членов). В следующем фрагменте программного кода обратите внимание на то, что инициализация может выполняться и для внутренних объектных ссылок, а не только для числовых типов данных.
// Если нужно отказаться от значений, предусмотренных по умолчанию,
// эта техника позволяет избежать повторной записи программного
// хода инициализации в каждом конструкторе.
class Test {
public int myInt = 9;
public string myStr = "Мое начальное значение. ";
public SportsCar viper = new SportsCar(Color.Red);
...
}
Замечание. Инициализация членов выполняется до выполнения программной логики конструктора. Если присвоить значение полю в самом конструкторе, это сведет на нет инициализацию члена.
- Структура простой программы на C#
- Несколько слов о классе System.Environment
- Определение классов и создание объектов
- Класс System.Console
- Доступность членов
- Значения, назначаемые переменным по умолчанию
- Синтаксис инициализации членов-переменных
- Определение констант
- Определение полей только для чтения
- Ключевое слово static
- Модификаторы параметров методов
- Итерационные конструкции
- Конструкции выбора решений и операции сравнения
- Типы, характеризуемые значениями, и ссылочные типы
- Операции создания объектного образа и восстановления из объектного образа
- Работа с перечнями .NET
- Мастер-класс: System.Object
- Переопределение элементов System.Object, заданных по умолчанию
- Типы данных System (и их обозначения в C#)
- Тип данных System.String
- Роль System.Text.StringBuilder
- Типы массивов .NET
- Типы с разрешением принимать значение null
- Пользовательские пространства имен
- Резюме
- 1.2. Базовый синтаксис и семантика Ruby
- Значения переменных по умолчанию
- Вызов хранимых процедур InterBase с использованием стандартного синтаксиса ODBC
- 1.5.1. Синтаксис
- 1.4.4. Использование нетрадиционного синтаксиса на диаграммах функциональной модели
- Использование переменных документа
- Просмотр переменных
- Пример 5-1. Вывод "причудливых" переменных
- 14.4.2. Хранение переменных окружения в виде массива или хэша
- Листинг 7.4. (print-environment.c) Отображение переменных среды процесса
- 7.2. Синтаксис CSS
- Определение членов класса