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



Download 6,27 Mb.
Pdf ko'rish
bet234/658
Sana12.06.2023
Hajmi6,27 Mb.
#950840
1   ...   230   231   232   233   234   235   236   237   ...   658
Bog'liq
CLR via C Programmirovanie na platforme Microsoft NET Framework 4 5 na yazyke C

Основные ограничения
В параметре-типе можно задать не более одного основного ограничения. Основным 
ограничением может быть ссылочный тип, указывающий на незапечатанный класс. 
Нельзя использовать для этой цели следующие ссылочные типы: 
System.Object

System.Array

System.Delegate

System.MulticastDelegate

System.ValueType

System.Enum
и 
System.Void
.
При задании ограничения ссылочного типа вы гарантируете компилятору, что 
заданный аргумент-тип будет относиться либо к типу, указанному в ограничении
либо к производному от него типу. Для примера возьмем следующий обобщенный 
класс:
internal sealed class PrimaryConstraintOfStream where T : Stream {
public void M(T stream) {
stream.Close();// OK
}
}


326
Глава.12 .Обобщения
В этом определении класса для параметра-типа 
T
установлено основное огра-
ничение 
Stream
(из пространства имен 
System.IO
), сообщающее компилятору, что 
код, использующий 
PrimaryConstraintOfStream
, должен задавать аргумент типа 
Stream
или производного от него типа (например, 
FileStream
). Если параметр-тип 
не задает основное ограничение, автоматически задается тип 
System.Object
. Однако 
если в исходном тексте явно указать 
System.Object
, компилятор C# выдаст ошибку 
(ошибка CS0702: в ограничении не может использоваться специальный класс 
object
):
error CS0702: Constraint cannot be special class 'object'
Есть два особых основных ограничения: 
class
и 
struct
. Ограничение 
class
гарантирует компилятору, что указанный аргумент-тип будет иметь ссылочный 
тип. Этому ограничению удовлетворяют все типы-классы, типы-интерфейсы, типы-
делегаты и типы-массивы, как в следующем обобщенном классе:
internal sealed class PrimaryConstraintOfClass where T : class {
public void M() {
T temp = null;// Допустимо, потому что тип T должен быть ссылочным
}
}
В этом примере присваивание 
temp
значения 
null
допустимо, потому что из-
вестно, что 
T
имеет ссылочный тип, а любая переменная ссылочного типа может 
быть равна 
null
. При отсутствии у 
T
ограничений этот код бы не скомпилировал-
ся, потому что тип 
Т
мог бы быть значимым, а переменные значимого типа нельзя 
приравнять к 
null
.
Ограничение 
struct
гарантирует компилятору, что указанный аргумент типа 
будет иметь значимый тип. Этому ограничению удовлетворяют все значимые 
типы, а также перечисления. Однако компилятор и CLR рассматривают любой 
значимый тип 
System.Nullable
как особый, и значимые типы с поддержкой 
null
не подходят под это ограничение. Это объясняется тем, что для параметра 
типа 
Nullable
действует ограничение 
struct
, а среда CLR запрещает такие 
рекурсивные типы, как 
Nullable>
. Значимые типы с поддержкой 
null
обсуждаются в главе 19.
Пример класса, в котором параметр-тип ограничивается ключевым словом 
struct
:
internal sealed class PrimaryConstraintOfStruct where T : struct {
public static T Factory() {
// Допускается, потому что у каждого значимого типа неявно
// есть открытый конструктор без параметров
return new T();
}
}
В этом примере применение к 
T
оператора 
new
правомерно, потому что известно, 
что 
T
имеет значимый тип, а у всех значимых типов неявно есть открытый конструк-
тор без параметров. Если бы тип 
T
был неограниченным, ограниченным ссылочным 


327
Верификация.и.ограничения
типом или ограниченным классом, этот код не скомпилировался бы, потому что 
у некоторых ссылочных типов нет открытых конструкторов без параметров.

Download 6,27 Mb.

Do'stlaringiz bilan baham:
1   ...   230   231   232   233   234   235   236   237   ...   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