×
Traktatov.net » C# 4.0: полное руководство » Читать онлайн
Страница 41 из 650 Настройки

Неявно типизированные переменные

Как пояснялось выше, все переменные в C# должны быть объявлены. Как правило, при объявлении переменной сначала указывается тип, например int или bool, а затем имя переменной. Но начиная с версии C# 3.0, компилятору предоставляется возможность самому определить тип локальной переменной, исходя из значения, которым она инициализируется. Такая переменная называется неявно типизированной.

Неявно типизированная переменная объявляется с помощью ключевого слова var и должна быть непременно инициализирована. Для определения типа этой переменной компилятору служит тип ее инициализатора, т.е. значения, которым она инициализируется. Рассмотрим такой пример.


>var е = 2.7183;


В данном примере переменная е инициализируется литералом с плавающей точкой, который по умолчанию имеет тип 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((s1 * s1) + (s2 * s2));

>    Console.Write("Гипотенуза треугольника со сторонами "

>             + s1 + " by " + s2 + " равна ");

>    Console.WriteLine("{0:#.###}.", hypot);


>    // Следующий оператор не может быть скомпилирован,

>    // поскольку переменная s1 имеет тип double и

>    // ей нельзя присвоить десятичное значение.

>    // s1 = 12.2М; // Ошибка!

>  }

>}


Результат выполнения этой программы оказывается таким же, как и прежде. Важно подчеркнуть, что неявно типизированная переменная по-прежнему остается строго типизированной. Обратите внимание на следующую закомментированную строку из приведенной выше программы.


>// s1 = 12.2М; // Ошибка!


Эта операция присваивания недействительна, поскольку переменная s1 относится к типу double. Следовательно, ей нельзя присвоить десятичное значение. Единственное отличие неявно типизированной переменной от обычной, явно типизированной переменной, — в способе определения ее типа. Как только этот тип будет определен, он закрепляется за переменной до конца ее существования. Это, в частности, означает, что тип переменной s1 не может быть изменен по ходу выполнения программы.

Неявно типизированные переменные внедрены в C# не для того, чтобы заменить собой обычные объявления переменных. Напротив, неявно типизированные переменные предназначены для особых случаев, и самый примечательный из них имеет отношение к языку интегрированных запросов (LINQ), подробно рассматриваемому в главе 19. Таким образом, большинство объявлений переменных должно и впредь оставаться явно типизированными, поскольку они облегчают чтение и понимание исходного текста программы.