Главная arrow Язык программирования C# arrow C# Полное руководство Герберт Шилдт arrow Неявно типизированные переменные C# Полное руководство Герберт Шилдт

Неявно типизированные переменные C# Полное руководство Герберт Шилдт

Как пояснялось выше, все переменные в C# должны быть объявлены. Как правило, при объявлении переменной сначала указывается тип, например int или bool, а затем имя переменной. Но начиная с версии C# 3.0 компилятору предоставляется возможность самому определить тип локальной переменной, исходя из значения, которым она инициализируется. Такая переменная называется неявно типизированной.
Неявно типизированная переменная объявляется с помощью ключевого слова var и должна быть непременно инициализирована. Для определения типа этой переменной компилятору служит тип ее инициализатора, т.е. значения, которым она инициализируется. Рассмотрим такой пример:
var е = 2 . 718 3 ;
В данном примере переменная е инициализируется литералом с плавающей точкой, который по умолчанию имеет тип double, и поэтому она относится к типу double. Если бы переменная е была объявлена следующим образом:
var е = 2.7183F;
то она была бы отнесена к типу float.
В приведенном ниже примере программы демонстрируется применение неявно типизированных переменных. Он представляет собой вариант программы из предыдущего раздела, переделанный таким образом, чтобы все переменные были типизированы неявно.

// Продемонстрировать применение неявно типизированных переменных.
using System;
class ImplicitlyTypedVar { static void Main() {
// Эти переменные типизированы неявно. Они отнесены
// к типу double, поскольку инициализирующие их
// выражения сами относятся к типу double.
var s1 = 4.0;
var s2 = 5.0;
// Итак, переменная hypot типизирована неявно и // относится к типу double, поскольку результат,
// возвращаемый методом Sqrt(), имеет тип double, var hypot = Math. Sqrt ( (si * si) + (s2 * s2) );
Console.Write("Гипотенуза треугольника со сторонами " + si + " by " + s2 + " равна ") ;
Console.WriteLine("{0:#.###}.", hypot);
// Следующий оператор не может быть скомпилирован,
// поскольку переменная s1 имеет тип double и
// ей нельзя присвоить десятичное значение.
// s1 = 12.2М;
// Ошибка!
}
}

Результат выполнения этой программы оказывается таким же, как и прежде.
Важно подчеркнуть, что неявно типизированная переменная по-прежнему остается строго типизированной. Обратите внимание на следующую закомментированную строку из приведенной выше программы.
// si = 12.2М; // Ошибка!
Эта операция присваивания недействительна, поскольку переменная si относится к типу double. Следовательно, ей нельзя присвоить десятичное значение. Единственное отличие неявно типизированной переменной от обычной, явно типизированной переменной, — в способе определения ее типа. Как только этот тип будет определен, он( закрепляется за переменной до конца ее существования. Это, в частности, означает, что тип переменной si не может быть изменен по ходу выполнения программы.
Неявно типизированные переменные внедрены в C# не для того, чтобы заменить обычные объявления переменных. Напротив, неявно типизированные переменные предназначены для особых случаев, и самый примечательный из них имеет отношение к языку интегрированных запросов (LINQ), подробно рассматриваемому в главе 19. Таким образом, большинство объявлений переменных должны и впредь оставаться явно типизированными, поскольку они облегчают чтение и понимание исходного кода программы.
И последнее замечание: одновременно можно объявить только одну неявно типизированную переменную. Поэтому объявление
var si = 4.0, s2 = 5.0; // Ошибка!
является неверным и не может быть скомпилировано, поскольку в нем предпринимается попытка объявить обе переменные, s1 и s2, одновременно.