Читать «ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание» онлайн - страница 68
Эндрю Троелсен
// Ошибка компиляции! Переменная 'localInt' должна получить
// начальное значение до ее использования.
static void Main(string[] args) {
int localInt;
Console.WriteLine(localInt);
}
Исправить проблему очень просто. Следует присвоить переменной начальное значение.
// Так лучше: теперь все довольны.
static void Main(string[] args) {
int localInt = 0;
Console.WriteLine(localInt);
}
Замечание. Правило обязательного присваивания начальных значений локальным переменным имеет одно исключение: если переменная используется в качестве
Синтаксис инициализации членов-переменных
Типы класса обычно имеют множество членов-переменных (также называемых
// Все это хорошо, но такая избыточность…
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# предлагается ключевое слово const. После определения значения константы любая попытка изменить это значение приводит к ошибке компиляции. В отличие От C++, в C# ключевое слово const нельзя указывать для параметров и возвращаемых значений – оно предназначено для создания локальных данных и данных уровня экземпляра.