Чтение онлайн

на главную - закладки

Жанры

Язык программирования C#9 и платформа .NET5
Шрифт:

В таком случае, основываясь на первоначально присвоенных значениях, компилятор способен вывести для переменной

myInt
тип
System.Int32
, для переменной
myBool
— тип
System.Boolean
, а для переменной
myString
— тип
System.String
. В сказанном легко убедиться за счет вывода на консоль имен типов с помощью рефлексии. Как будет показано в главе 17, рефлексия представляет собой действие по определению состава типа во время выполнения. Например, с помощью рефлексии можно определить
тип данных неявно типизированной локальной переменной. Модифицируйте метод
DeclareImplicitVars
:

static void DeclareImplicitVars

{

// Неявно типизированные локальные переменные,

var myInt = 0;

var myBool = true;

var myString = "Time, marches on...";

// Вывести имена лежащих в основе типов.

Console.WriteLine("myInt is a: {0}", myInt.GetType.Name);

// Вывод типа myInt

Console.WriteLine("myBool is a: {0}", myBool.GetType.Name);

// Вывод типа myBool

Console.WriteLine("myString is a: {0}", myString.GetType.Name);

// Вывод типа myString

}

На заметку! Имейте в виду, что такую неявную типизацию можно использовать для любых типов, включая массивы, обобщенные типы (см. главу 10) и собственные специальные типы. В дальнейшем вы увидите и другие примеры неявной типизации. Вызов метода

DeclareImplicitVars
в операторах верхнего уровня дает следующий вывод:

***** Fun with Implicit Typing *****

myInt is a: Int32

myBool is a: Boolean

myString is a: String

Неявное объявление чисел

Неявное объявление Как утверждалось ранее, целые числа по умолчанию получают тип

int
, а числа с плавающей точкой — тип
double
. Создайте новый метод по имени
DeclareImplicitNumerics
и поместите в него показанный ниже код, в котором демонстрируется неявное объявление чисел:

static void DeclareImplicitNumerics

{

// Неявно типизированные числовые переменные.

var myUInt = 0u;

var myInt = 0;

var myLong = 0L;

var myDouble = 0.5;

var myFloat = 0.5F;

var myDecimal = 0.5M;

// Вывод лежащего в основе типа.

Console.WriteLine("myUInt is a: {0}", myUInt.GetType.Name);

Console.WriteLine("myInt is a: {0}", myInt.GetType.Name);

Console.WriteLine("myLong is a: {0}", myLong.GetType.Name);

Console.WriteLine("myDouble is a: {0}", myDouble.GetType.Name);

Console.WriteLine("myFloat is a: {0}", myFloat.GetType.Name);

Console.WriteLine("myDecimal is a: {0}", myDecimal.GetType.Name);

}

Ограничения

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

С использованием ключевого слова

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

class ThisWillNeverCompile

{

// Ошибка! Ключевое слово var не может применяться к полям!

private var myInt = 10;

// Ошибка! Ключевое слово var не может применяться

// к возвращаемому значению или типу параметра!

public var MyMethod(var x, var y){}

}

Кроме того, локальным переменным, которые объявлены с ключевым словом

var
, обязано присваиваться начальное значение в самом объявлении, причем присваивать
null
в качестве начального значения невозможно. Последнее ограничение должно быть рациональным, потому что на основании только
null
компилятору не удастся вывести тип, на который бы указывала переменная.

// Ошибка! Должно быть присвоено значение!

var myData;

// Ошибка! Значение должно присваиваться в самом объявлении!

var myInt;

myInt = 0;

// Ошибка! Нельзя присваивать null в качестве начального значения!

var myObj = null;

Тем не менее, присваивать

null
локальной переменной, тип которой выведен в результате начального присваивания, разрешено (при условии, что это ссылочный тип):

// Допустимо, если SportsCar имеет ссылочный тип!

var myCar = new SportsCar;

myCar = null;

Вдобавок значение неявно типизированной локальной переменной допускается присваивать другим переменным, которые типизированы как неявно, так и явно:

// Также нормально!

var myInt = 0;

var anotherlnt = myInt;

string myString = "Wake up!";

Поделиться:
Популярные книги

Стеллар. Трибут

Прокофьев Роман Юрьевич
2. Стеллар
Фантастика:
боевая фантастика
рпг
8.75
рейтинг книги
Стеллар. Трибут

Его огонь горит для меня. Том 2

Муратова Ульяна
2. Мир Карастели
Фантастика:
юмористическая фантастика
5.40
рейтинг книги
Его огонь горит для меня. Том 2

На границе империй. Том 9. Часть 4

INDIGO
17. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 9. Часть 4

Наследник

Кулаков Алексей Иванович
1. Рюрикова кровь
Фантастика:
научная фантастика
попаданцы
альтернативная история
8.69
рейтинг книги
Наследник

Совершенно несекретно

Иванов Дмитрий
15. Девяностые
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Совершенно несекретно

Ваше Сиятельство 2

Моури Эрли
2. Ваше Сиятельство
Фантастика:
фэнтези
альтернативная история
аниме
5.00
рейтинг книги
Ваше Сиятельство 2

Прометей: каменный век II

Рави Ивар
2. Прометей
Фантастика:
альтернативная история
7.40
рейтинг книги
Прометей: каменный век II

Единственная для темного эльфа 3

Мазарин Ан
3. Мир Верея. Драконья невеста
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Единственная для темного эльфа 3

Жандарм

Семин Никита
1. Жандарм
Фантастика:
попаданцы
альтернативная история
аниме
4.11
рейтинг книги
Жандарм

Долгий путь домой

Русич Антон
Вселенная EVE Online
Фантастика:
космическая фантастика
попаданцы
6.20
рейтинг книги
Долгий путь домой

Прогрессор поневоле

Распопов Дмитрий Викторович
2. Фараон
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Прогрессор поневоле

Наследие Маозари 6

Панежин Евгений
6. Наследие Маозари
Фантастика:
попаданцы
постапокалипсис
рпг
фэнтези
эпическая фантастика
5.00
рейтинг книги
Наследие Маозари 6

Я еще не барон

Дрейк Сириус
1. Дорогой барон!
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Я еще не барон

Лолита

Набоков Владимир Владимирович
Проза:
классическая проза
современная проза
8.05
рейтинг книги
Лолита