Имейте в виду, что неявная типизация локальных переменных дает в результате
var в языке C# — не тот же самый прием, который используется в сценарных языках (вроде JavaScript или Perl). Кроме того, ключевое слово var — это не тип данных Variant в СОМ, когда переменная на протяжении своего времени жизни может хранить значения разных типов (что часто называют На заметку!
В C# поддерживается возможность динамической типизации с применением ключевого словаdynamic. Вы узнаете о таком аспекте языка в главе 18.Взамен средство выведения типов сохраняет аспект строгой типизации языка C# и воздействует только на объявление переменных при компиляции. Затем данные трактуются, как если бы они были объявлены с выведенным типом; присваивание такой переменной значения другого типа будет приводить к ошибке на этапе компиляции.
static void ImplicitTypingIsStrongTyping
{
// Компилятору известно, что s имеет тип System.String.
var s = "This variable can only hold string data!";
s = "This is fine...";
// Можно обращаться к любому члену лежащего в основе типа.
string upper = s.ToUpper;
// Ошибка! Присваивание числовых данных строке не допускается!
s = 44;
}
Полезность неявно типизированных локальных переменных
Теперь, когда вы видели синтаксис, используемый для объявления неявно типизируемых локальных переменных, вас наверняка интересует, в каких ситуациях его следует применять. Прежде всего, использование var
int, то сразу и объявляйте ее с типом int!Однако, как будет показано в начале главы 13, в наборе технологий LINQ применяются
subset в следующем примере кода LINQ?static void LinqQueryOverInts
{
int[] numbers = { 10, 20, 30, 40, 1, 2, 3, 8 };
// Запрос LINQ!
var subset = from i in numbers where i < 10 select i;
Console.Write("Values in subset: ");
foreach (var i in subset)
{
Console.Write("{0} ", i);
}
Console.WriteLine;
// К какому же типу относится subset?
Console.WriteLine("subset is a: {0}", subset.GetType.Name);
Console.WriteLine("subset is defined in: {0}",
subset.GetType.Namespace);
}
Вы можете предположить, что типом данных subset
ildasm.exe. Хорошая новость в том, что при использовании LINQ вы редко (если вообще когда-либо) беспокоитесь о типе возвращаемого значения запроса; вы просто присваиваете значение неявно типизированной локальной переменной.Фактически можно было бы даже утверждать, что
var полностью оправдано, является определение данных, возвращаемых из запроса LINQ. Запомните, если вы знаете, что нужна переменная int, то просто объявляйте ее с типом int! Злоупотребление неявной типизацией в производственном коде (через ключевое слово var) большинство разработчиков расценивают как плохой стиль кодирования.Работа с итерационными конструкциями C#
Бьёрн Страуструп , Ирина Сергеевна Козлова , Бьерн Страуструп , Валерий Федорович Альмухаметов
Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT