Net framework 5, а также среды Visual Studio 2012 и C#



Download 6,27 Mb.
Pdf ko'rish
bet181/658
Sana12.06.2023
Hajmi6,27 Mb.
#950840
1   ...   177   178   179   180   181   182   183   184   ...   658
Bog'liq
CLR via C Programmirovanie na platforme Microsoft NET Framework 4 5 na yazyke C

неявно типизированные 
локальные переменные
В C# поддерживается возможность определения типа используемых в методе ло-
кальных переменных по типу используемого при их инициализации выражения:


249
Неявно.типизированные.локальные.переменные
private static void ImplicitlyTypedLocalVariables() {
var name = "Jeff";
ShowVariableType(name); // Вывод: System.String
// var n = null; // Ошибка
var x = (String)null; // Допустимо, хотя и бесполезно
ShowVariableType(x); // Вывод: System.String
var numbers = new Int32[] { 1, 2, 3, 4 };
ShowVariableType(numbers); // Вывод: System.Int32[]
// Меньше символов при вводе сложных типов
var collection = new Dictionary() { { "Grant", 4.0f } };
// Вывод: System.Collections.Generic.Dictionary`2[System.String,System.Single]
ShowVariableType(collection);
foreach (var item in collection) {
// Вывод: System.Collections.Generic.KeyValuePair`2
[System.String,System.Single]
ShowVariableType(item);
}
}
private static void ShowVariableType(T t) {
Console.WriteLine(typeof(T));
}
Первая строка кода метода 
ImplicitlyTypedLocalVariables
вводит новую ло-
кальную переменную при помощи ключевого слова 
var
. Чтобы определить ее тип, 
компилятор смотрит на тип выражения с правой стороны от оператора присваивания 
(
=
). Так как 
"Jeff"
— это строка, компилятор присваивает переменной 
name
тип 
String
. Чтобы доказать, что компилятор правильно определяет тип, я написал уни-
версальный метод 
ShowVariableType
. Он определяет тип своего аргумента и выводит 
его на консоль. Для простоты чтения выводимые методом 
ShowVariableType
значе-
ния я добавил в виде комментариев внутрь метода 
ImplicitlyTypedLocalVariables
.
Вторая операция присваивания (закомментированная) в методе 
ImplicitlyType-
dLocalVariables
во время компиляции привела бы к ошибке (ошибка CS0815: 
невозможно присвоить значение 
null
локальной переменной с неявно заданным 
типом):
error CS0815: Cannot assign to an implicitly-typed local variable
Дело в том, что значение 
null
неявно приводится к любому ссылочному типу 
или значимому типу, допускающему значение 
null
. Соответственно, компилятор 
не в состоянии однозначно определить его тип. Однако в третьей операции при-
сваивания я показал, что инициализировать локальную переменную с неявно 
заданным типом значением 
null
все-таки можно, если в явном виде указать тип 
(в моем примере это тип 
String
). Впрочем, это не самая полезная возможность, так 
как, написав 
String
x
=
null;
, вы получите тот же самый результат.


250
Глава.9 .Параметры
В четвертом примере в полной мере демонстрируется полезность локальных 
переменных неявно заданного типа. Ведь без этой возможности вам бы потребова-
лось с обеих сторон от оператора присваивания писать 
Dictionary
Single>

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

using
и 
for
. Кроме того, оно полезно в процессе экспериментов с кодом. К примеру, 
вы инициализируете локальную переменную с неявно заданным типом, взяв за 
основу тип возвращаемого методом значения. Но в будущем может появиться не-
обходимость поменять тип возвращаемого значения. В этом случае компилятор 
автоматически определит, что тип возвращаемого методом значения изменился, 
и изменит тип локальной переменной! К сожалению, остальной код внутри ме-
тода, работающий с этой переменной, может перестать компилироваться — если 
этот код обращается к членам в предположении, что переменная принадлежит 
к старому типу.
В Microsoft Visual Studio при наведении указателя мыши на ключевое слово 
var
появляется всплывающая подсказка с названием типа, определяемого компи-
лятором. Функцию неявного задания типа локальных переменных в C# следует 
задействовать при работе с методами, использующими анонимные типы. Они под-
робно рассматривают в главе 10.
Тип параметра метода при помощи ключевого слова 
var
объявлять нельзя. Ведь 
компилятор будет определять его, исходя из типа аргументов, передаваемых при 
вызове метода. Вызова же может вообще не быть или же, наоборот, их может быть 
несколько. Аналогично, нельзя объявлять при помощи этого ключевого слова тип 
поля. Для такого ограничения в C# существует множество причин. Одна из них — 
возможность обращения к полю из нескольких методов. Группа проектирования C# 
считает, что контракт (тип переменной) должен быть указан явно. Второй причиной 
является тот факт, что в данном случае анонимные типы (обсуждаемые в главе 10) 
начнут выходить за границы одного метода.

Download 6,27 Mb.

Do'stlaringiz bilan baham:
1   ...   177   178   179   180   181   182   183   184   ...   658




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish