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


Конструкторы экземпляров и классы



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

Конструкторы экземпляров и классы 
(ссылочные типы)
Конструкторы — это специальные методы, позволяющие корректно инициализи-
ровать новый экземпляр типа. В таблице определений, входящих в метаданные, 
методы-конструкторы всегда отмечают сочетанием 
.ctor
(от 
constructor
). При 
создании экземпляра объекта ссылочного типа выделяется память для полей дан-
ных экземпляра и инициализируются служебные поля (указатель на объект-тип 
и индекс блока синхронизации), после чего вызывается конструктор экземпляра, 
устанавливающий исходное состояние нового объекта.
При конструировании объекта ссылочного типа выделяемая для него память 
всегда обнуляется до вызова конструктора экземпляра типа. Любые поля, не за-
даваемые конструктором явно, гарантированно содержат 0 или 
null
.
В отличие от других методов конструкторы экземпляров не наследуются. Иначе 
говоря, у класса есть только те конструкторы экземпляров, которые определены 
в этом классе. Невозможность наследования означает, что к конструктору экзем-
пляров нельзя применять модификаторы 
virtual

new

override

sealed
и 
abstract

Если определить класс без явно заданных конструкторов, многие компиляторы (в том 
числе компилятор C#) создадут конструктор по умолчанию (без параметров), реа-
лизация которого просто вызывает конструктор без параметров базового класса.
Например, рассмотрим следующее определение класса:
public class SomeType { }
Это определение идентично определению:
public class SomeType {
public SomeType() : base() { }
}


216
Глава.8 .Методы
Для абстрактных классов компилятор создает конструктор по умолчанию с мо-
дификатором 
protected
, в противном случае область действия будет открытой 
(
public
). Если в базовом классе нет конструктора без параметров, производный 
класс должен явно вызвать конструктор базового класса, иначе компилятор вернет 
ошибку. Для статических классов (запечатанных и абстрактных) компилятор не 
создает конструктор по умолчанию.
В типе может определяться несколько конструкторов, при этом сигнатуры 
и уровни доступа к конструкторам обязательно должны отличаться. В случае 
верифицируемого кода конструктор экземпляров должен вызывать конструктор 
базового класса до обращения к какому-либо из унаследованных от него полей. 
Многие компиляторы, включая C#, генерируют вызов конструктора базового 
класса автоматически, поэтому вам, как правило, об этом можно не беспокоиться. 
В конечном счете всегда вызывается открытый конструктор объекта 
System.Object
без параметров. Этот конструктор ничего не делает — просто возвращает управление 
по той простой причине, что в 
System.Object
не определено никаких экземплярных 
полей данных, поэтому конструктору просто нечего делать.
В редких ситуациях экземпляр типа может создаваться без вызова конструк-
тора экземпляров. В частности, метод 
MemberwiseClone
объекта 
Object
выделяет 
память, инициализирует служебные поля объекта, а затем копирует байты ис-
ходного объекта в область памяти, выделенную для нового объекта. Кроме того, 
конструктор обычно не вызывается при десериализации объекта. Код десериа-
лизации выделяет память для объекта без вызова конструктора, используя метод 
GetUninitializedObject
или 
GetSafeUninitializedObject
типа 
System.Runtime.
Serialization.FormatterServices
(см. главу 24).

Download 6,27 Mb.

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