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



Download 6,27 Mb.
Pdf ko'rish
bet155/658
Sana12.06.2023
Hajmi6,27 Mb.
#950840
1   ...   151   152   153   154   155   156   157   158   ...   658
Bog'liq
CLR via C Programmirovanie na platforme Microsoft NET Framework 4 5 na yazyke C

ВниМание
Нельзя.вызывать.какие-либо.виртуальные.методы.конструктора,.которые.могут.
повлиять.на.создаваемый.объект .Причина.проста:.если.вызываемый.виртуальный.
метод.переопределен.в.типе,.экземпляр.которого.создается,.происходит.реализа-
ция.производного.типа,.но.к.этому.моменту.еще.не.завершилась.инициализация.
всех.полей.в.иерархии .В.таких.обстоятельствах.последствия.вызова.виртуального.
метода.непредсказуемы 
C# предлагает простой синтаксис, позволяющий инициализировать поля во 
время создания объекта ссылочного типа:
internal sealed class SomeType {
private Int32 m_x = 5; 
}
При создании объекта 
SomeType
его поле 
m_x
инициализируется значением 5. 
Вы можете спросить: как это происходит? Изучив IL-код метода-конструктора 
этого объекта (этот метод также фигурирует под именем 
.ctor
), вы увидите сле-
дующий код:


217
Конструкторы.экземпляров.и.классы.(ссылочные.типы)
.method public hidebysig specialname rtspecialname
instance void .ctor() cil managed
{
// Code size 14 (0xe)
.maxstack 8
IL_0000: ldarg.0
IL_0001: ldc.i4.5
IL_0002: stfld int32 SomeType::m_x
IL_0007: ldarg.0
IL_0008: call instance void [mscorlib]System.Object::.ctor()
IL_000d: ret
} // end of method SomeType::.ctor
Как видите, конструктор объекта 
SomeType
содержит код, записывающий в поле 
m_x
значение 5 и вызывающий конструктор базового класса. Иначе говоря, компи-
лятор C# предлагает удобный синтаксис, позволяющий инициализировать поля 
экземпляра при их объявлении. Компилятор транслирует этот синтаксис в метод-
конструктор, выполняющий инициализацию. Это значит, что нужно быть готовым 
к разрастанию кода, как это показано на следующем примере:
internal sealed class SomeType { 
private Int32 m_x = 5; 
private String m_s = "Hi there";
private Double m_d = 3.14159; 
private Byte m_b;
// Это конструкторы
public SomeType() { ... } 
public SomeType(Int32 x) { ... } 
public SomeType(String s) { ...; m_d = 10; } 
}
Генерируя IL-код для трех методов-конструкторов из этого примера, компилятор 
помещает в начало каждого из методов код, инициализирующий поля 
m_x

m_s
и 
m_d

После кода инициализации вставляется вызов конструктора базового класса, а за-
тем добавляется код, расположенный внутри методов-конструкторов. Например, 
IL-код, сгенерированный для конструктора с параметром типа 
String
, состоит из 
кода, инициализирующего поля 
m_x

m_s
и 
m_d
, и кода, перезаписывающего поле 
m_d
значением 10. Заметьте: поле 
m_b
гарантированно инициализируется значением 0, 
даже если нет кода, инициализирующего это поле явно.

Download 6,27 Mb.

Do'stlaringiz bilan baham:
1   ...   151   152   153   154   155   156   157   158   ...   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