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


Приведение типов в C# с помощью операторов is и as



Download 6,27 Mb.
Pdf ko'rish
bet91/658
Sana12.06.2023
Hajmi6,27 Mb.
#950840
1   ...   87   88   89   90   91   92   93   94   ...   658
Bog'liq
CLR via C Programmirovanie na platforme Microsoft NET Framework 4 5 na yazyke C

Приведение типов в C# с помощью операторов is и as
В C# существуют другие механизмы приведения типов. Например, оператор 
is
проверяет совместимость объекта с данным типом, а в качестве результата выдает 
значение типа 
Boolean
(
true
или 
false
). Оператор 
is
никогда не генерирует ис-
ключение. Взгляните на следующий код:
Object o = new Object(); 
Boolean b1 = (o is Object); // b1 равно true 
Boolean b2 = (o is Employee); // b2 равно false 


127
Приведение.типов
Для 
null
-ссылок оператор 
is
всегда возвращает 
false
, так как объекта, тип 
которого нужно проверить, не существует.
Обычно оператор 
is
используется следующим образом:
if (o is Employee) { 
Employee e = (Employee) o; 
// Используем e внутри инструкции if 

В этом коде CLR по сути проверяет тип объекта дважды: сначала в операторе 
is
определяется совместимость 
o
с типом 
Employee
, а затем в теле оператора 
if
анализируется, является ли 
o
ссылкой на 
Employee
. Контроль типов в CLR укре-
пляет безопасность, но при этом приходится жертвовать производительностью, 
так как среда CLR должна выяснять фактический тип объекта, на который ссы-
лается переменная (
o
), а затем проверять всю иерархию наследования на предмет 
наличия среди базовых типов заданного типа (
Employee
). Поскольку такая схема 
встречается в программировании часто, в C# предложен механизм, повышающий 
эффективность кода с помощью оператора 
as
:
Employee e = o as Employee; 
if (e != null) { 
// Используем e внутри инструкции if 

В этом коде CLR проверяет совместимость 
o
с типом 
Employee
. Если 
o
и 
Employee
совместимы, 
as
возвращает ненулевой указатель на этот объект, а если нет — опера-
тор 
as
возвращает 
null
. Заметьте: оператор 
as
заставляет CLR верифицировать тип 
объекта только один раз, а 
if
лишь сравнивает 
e
с 
null
— такая проверка намного 
эффективнее, чем определение типа объекта.
По сути, оператор 
as
отличается от оператора приведения типа только тем, 
что никогда не генерирует исключение. Если приведение типа невозможно, ре-
зультатом является 
null
. Если не сравнить полученный оператором результат 
с 
null
и попытаться работать с пустой ссылкой, возникнет исключение 
System.
NullReferenceException
. Например:
System.Object o = new Object(); // Создание объекта Object
Employee e = o as Employee; // Приведение o к типу Employee
// Преобразование невыполнимо: исключение не возникло, но e равно null
e.ToString(); // Обращение к e вызывает исключение NullReferenceException
Давайте проверим, как вы усвоили материал. Допустим, существуют описания 
следующих классов:
internal class B { // Базовый класс

internal class D : B { // Производный класс

В первом столбце табл. 4.3 приведен код на C#. Попробуйте определить результат 
обработки этих строк компилятором и CLR. Если код компилируется и выполняется 


128
Download 6,27 Mb.

Do'stlaringiz bilan baham:
1   ...   87   88   89   90   91   92   93   94   ...   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