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



Download 6,27 Mb.
Pdf ko'rish
bet161/658
Sana12.06.2023
Hajmi6,27 Mb.
#950840
1   ...   157   158   159   160   161   162   163   164   ...   658
Bog'liq
CLR via C Programmirovanie na platforme Microsoft NET Framework 4 5 na yazyke C

ПриМеЧание
Поскольку.CLR.гарантирует,.что.конструктор.типа.выполняется.только.однажды.
в.каждом.домене.приложений,.а.также.обеспечивает.его.безопасность.по.отноше-
нию.к.потокам,.конструктор.типа.лучше.всего.подходит.для.инициализации.всех.
объектов-одиночек.(singleton),.необходимых.для.существования.типа 
В рамках одного потока возможна неприятная ситуация, когда существует два 
конструктора типа, содержащих перекрестно ссылающийся код. Например, кон-
структор типа 
ClassA
содержит код, ссылающийся на 
ClassB
, а последний содержит 
конструктор типа, ссылающийся на 
ClassA
. Даже в таких условиях CLR заботится, 
чтобы код конструкторов типов выполнился лишь однажды, но исполняющая среда 
не в состоянии обеспечить завершение исполнения конструктора типа 
ClassA
до 
начала исполнения конструктора типа 
ClassB
. При написании кода следует избе-
гать подобных ситуаций. В действительности, поскольку за вызов конструкторов 
типов отвечает CLR, не нужно писать код, который требует вызова конструкторов 
типов в определенном порядке.
Наконец, если конструктор типа генерирует необрабатываемое исключение, CLR 
считает такой тип непригодным. При попытке обращения к любому полю или методу 
такого типа возникает исключение 
System.TypeInitializationException
.
Код конструктора типа может обращаться только к статическим полям типа; 
обычно это делается, чтобы их инициализировать. Как и в случае экземплярных 
полей, C# предлагает простой синтаксис:
internal sealed class SomeType {
private static Int32 s_x = 5;
}


225
Конструкторы.типов
ПриМеЧание
C#.не.позволяет.в.значимых.типах.использовать.синтаксис.инициализации.полей.
на.месте,.но.разрешает.это.в.статических.полях .Иначе.говоря,.если.в.приведенном.
ранее.коде.заменить.class.на.struct,.код.откомпилируется.и.будет.работать,.как.за-
думано 
При компоновке этого кода компилятор автоматически генерирует конструктор 
типа 
SomeType
. Иначе говоря, получается тот же эффект, как если бы этот код был 
написан следующим образом:
internal sealed class SomeType {
private static Int32 s_x;
static SomeType() { s_x = 5; }
}
При помощи утилиты 
ILDasm exe
нетрудно проверить, какой код на самом деле 
сгенерировал компилятор. Для этого нужно изучить IL-код конструктора типа. 
В таблице определений методов, составляющей метаданные модуля, метод-кон-
структор типа всегда называется 
.cctor
(от 
class constructor
).
Из представленного далее IL-кода видно, что метод 
.cctor
является закрытым 
и статическим. Заметьте также, что код этого метода действительно записывает 
в статическое поле 
s_x
значение 5.
.method private hidebysig specialname rtspecialname static
void .cctor() cil managed
{
// Code size 7 (0x7)
.maxstack 8
IL_0000: ldc.i4.5
IL_0001: stsfld int32 SomeType::s_x
IL_0006: ret
} // end of method SomeType::.cctor
Конструктор типа не должен вызывать конструктор базового класса. Этот вызов 
не обязателен, так как ни одно статическое поле типа не используется совместно 
с базовым типом и не наследуется от него.

Download 6,27 Mb.

Do'stlaringiz bilan baham:
1   ...   157   158   159   160   161   162   163   164   ...   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