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


` 2[TKey,TValue] because Type.ContainsGenericParameters is true. Cannot create an instance of DictionaryStringKey `



Download 6,27 Mb.
Pdf ko'rish
bet220/658
Sana12.06.2023
Hajmi6,27 Mb.
#950840
1   ...   216   217   218   219   220   221   222   223   ...   658
Bog'liq
CLR via C Programmirovanie na platforme Microsoft NET Framework 4 5 na yazyke C

`
2[TKey,TValue] because Type.ContainsGenericParameters is true.
Cannot create an instance of DictionaryStringKey
`
1[TValue] because
Type.ContainsGenericParameters is true.
Created instance of DictionaryStringKey
`
1[System.Guid]
Object type=DictionaryStringKey
`
1[System.Guid]
Итак, при попытке создания экземпляра открытого типа метод 
CreateInstance
объекта 
Activator
выдает исключение 
ArgumentException
. На самом деле сообще-
ние об исключении означает, что тип все еще содержит обобщенные параметры типа.
В выводимой программой информации видно, что имена типов заканчиваются 
левой одиночной кавычкой (
`
), за которой следует число, означающее 
арность
(arity) типа, то есть число необходимых для него параметров типа. Например, ар-
ность класса 
Dictionary
равна 2, потому что для него требуется определить типы 
TKey
и 
TValue
. Арность класса 
DictionaryStringKey
равна 1, так как требуется 
указать лишь один тип — 
TValue
.


311
Инфраструктура.обобщений
Необходимо отметить, что CLR размещает статические поля типа в самом 
объекте-типе (см. главу 4). Следовательно, каждый закрытый тип имеет свои ста-
тические поля. Иначе говоря, статические поля, определенные в объекте 
List

не будут совместно использоваться объектами 
List
и 
List

потому что у каждого объекта закрытого типа есть свои статические поля. Если же 
в обобщенном типе определен статический конструктор (см. главу 8), то послед-
ний выполняется для закрытого типа лишь раз. Иногда разработчики определяют 
статический конструктор для обобщенного типа, чтобы аргументы типа соответ-
ствовали определенным критериям. Например, обобщенный тип, используемый 
только с перечислимыми типами, определяется следующим образом:
internal sealed class GenericTypeThatRequiresAnEnum {
static GenericTypeThatRequiresAnEnum() {
if (!typeof(T).IsEnum) {
throw new ArgumentException("T must be an enumerated type");
}
}
}
В CLR существует механизм 
ограничений
(constraints), предлагающий более 
удачный инструмент определения обобщенного типа с указанием допустимых 
для него аргументов типа. Но об ограничениях — чуть позже. К сожалению, этот 
механизм не позволяет ограничить аргументы типа только перечислимыми типами, 
поэтому в предыдущем примере необходим статический конструктор для проверки 
того, что используемый тип является перечислимым.

Download 6,27 Mb.

Do'stlaringiz bilan baham:
1   ...   216   217   218   219   220   221   222   223   ...   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