Язык программирования C#9 и платформа .NET5
{byte sum = (byte)(b1 + b2);Console.WriteLine("sum = {0} ", sum);}Подводя итоги по ключевым словам
иcheckedв С#, следует отметить, что стандартное поведение исполняющей среды .NET Core предусматривает игнорирование арифметического переполнения и потери значимости. Когда необходимо обрабатывать избранные операторы, должно использоваться ключевое словоunchecked. Если нужно перехватывать ошибки переполнения по всему приложению, то придется активизировать флагchecked. Наконец, ключевое слово/checkedможет применяться при наличии блока кода, в котором переполнение приемлемо (и, следовательно, не должно приводить к генерации исключения времени выполнения).uncheckedНеявно типизированные локальные переменные
Вплоть до этого места в главе при объявлении каждой локальной переменной явно указывался ее тип данных:
static void DeclareExplicitVars(){<b> // Явно типизированные локальные переменные</b><b> // объявляются следующим образом:</b><b> // типДанных имяПеременной = начальноеЗначение;</b>int myInt = 0;bool myBool = true;string myString = "Time, marches on...";}В то время как многие согласятся с тем, что явное указание типа данных для каждой переменной является рекомендуемой практикой, язык C# поддерживает возможность неявной типизации локальных переменных с использованием ключевого слова
. Ключевое словоvarможет применяться вместо указания конкретного типа данных (такого какvar,intилиbool). Когда вы поступаете подобным образом, компилятор будет автоматически выводить лежащий в основе тип данных на основе начального значения, используемого для инициализации локального элемента данных.stringЧтобы прояснить роль неявной типизации, создайте новый проект консольного приложения по имени
и добавьте его в свое решение. Обновите код вImplicitlyTypedLocalVars, как показано ниже:Program.csusing System;using System.Linq;Console.WriteLine("***** Fun with Implicit Typing *****");Добавьте следующую функцию, которая демонстрирует неявные объявления:
static void DeclareImplicitVars (){<b> // Неявно типизированные локальные переменные</b><b> // объявляются следующим образом:</b><b> // var имяПеременной = начальноеЗначение;</b>var myInt = 0;var myBool = true;var myString = "Time, marches on...";}На заметку! Строго говоря,
не является ключевым словом языка С#. Вполне допустимо объявлять переменные, параметры и поля по имениvar, не получая ошибок на этапе компиляции. Однако когда лексемаvarприменяется в качестве типа данных, то в таком контексте она трактуется компилятором как ключевое слово.varВ таком случае, основываясь на первоначально присвоенных значениях, компилятор способен вывести для переменной
типmyInt, для переменнойSystem.Int32— типmyBool, а для переменнойSystem.Boolean— типmyString. В сказанном легко убедиться за счет вывода на консоль имен типов с помощью рефлексии. Как будет показано в главе 17, рефлексия представляет собой действие по определению состава типа во время выполнения. Например, с помощью рефлексии можно определить тип данных неявно типизированной локальной переменной. Модифицируйте методSystem.String:DeclareImplicitVars()static void DeclareImplicitVars(){// Неявно типизированные локальные переменные,var myInt = 0;var myBool = true;var myString = "Time, marches on...";// Вывести имена лежащих в основе типов.Console.WriteLine("myInt is a: {0}", myInt.GetType().Name);// Вывод типа myIntConsole.WriteLine("myBool is a: {0}", myBool.GetType().Name);// Вывод типа myBoolConsole.WriteLine("myString is a: {0}", myString.GetType().Name);// Вывод типа myString}На заметку! Имейте в виду, что такую неявную типизацию можно использовать для любых типов, включая массивы, обобщенные типы (см. главу 10) и собственные специальные типы. В дальнейшем вы увидите и другие примеры неявной типизации. Вызов метода
в операторах верхнего уровня дает следующий вывод:DeclareImplicitVars()***** Fun with Implicit Typing *****myInt is a: Int32myBool is a: BooleanmyString is a: StringНеявное объявление чисел
Неявное объявление Как утверждалось ранее, целые числа по умолчанию получают тип
, а числа с плавающей точкой — типint. Создайте новый метод по имениdoubleи поместите в него показанный ниже код, в котором демонстрируется неявное объявление чисел:DeclareImplicitNumerics