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


Глава.12 .Обобщения ПриМеЧание



Download 6,27 Mb.
Pdf ko'rish
bet227/658
Sana12.06.2023
Hajmi6,27 Mb.
#950840
1   ...   223   224   225   226   227   228   229   230   ...   658
Bog'liq
CLR via C Programmirovanie na platforme Microsoft NET Framework 4 5 na yazyke C

318
Глава.12 .Обобщения
ПриМеЧание
Вариантность.действует.только.в.том.случае,.если.компилятор.сможет.установить.
возможность.преобразования.ссылок.между.типами .Другими.словами,.вариант-
ность.неприменима.для.значимых.типов.из-за.необходимости.упаковки.(boxing) .
Я.считаю,.что.из-за.этого.ограничения.вариантность.существенно.теряет.свою.по-
лезность .Например:
void ProcessCollection(IEnumerable collection) { ... }
Я.не.смогу.вызвать.этот.метод,.передавая.ссылку.на.объект.List.из-за.
невозможности.ссылочного.преобразования.между.значимым.типом.DateTime.и.объ-
ектом.Object,.даже.если.DateTime.унаследован.от.объекта.Object .Можно.решить.эту.
проблему.следующим.образом:
void ProcessCollection(IEnumerable collection) { ... }
Большое.преимущество.записи.ProcessCollection(IEnumerable.collection).
заключается.в.том,.что.здесь.используется.только.одна.версия.JIT-кода .Однако.
для.ProcessCollection.(IEnumerable.collection).тоже.существует.только.одна.
версия.JIT-кода,.совместно.используемая.всеми.T,.являющимися.ссылочными.ти-
пами .Для.T,.являющихся.значимыми.типами,.будут.генерироваться.другие.версии.
JIT-кода,.но.по.крайней.мере.теперь.можно.вызвать.метод.с.передачей.ему.коллекции.
значимого.типа 
Вариантность.также.недопустима.для.параметра-типа,.если.при.передаче.аргумента.
этого.типа.используются.ключевые.слова.out.и.ref .Например,.для.строки:
delegate void SomeDelegate(ref T t);
компилятор.выдает.следующее.сообщение.об.ошибке.(недействительная.ва-
риантность:.параметр-тип.'T'.должен.быть.инвариантно.действительным.для.
'SomeDelegate Invoke(ref.T)' .Параметр-тип.'T'.контравариантен):
Invalid variance: The type parameter 'T' must be invariantly valid on 
'SomeDelegate.Invoke(ref T)'. 'T' is contravariant
При использовании делегатов с обобщенными аргументами и возвращаемыми 
значениями рекомендуется всегда использовать ключевые слова 
in
и 
out
для обо-
значения контравариантности и ковариантности везде, где это возможно. Это не 
приводит ни к каким нежелательным последствиям, но позволит применять ваших 
делегатов в большем количестве сценариев.
Как и в случае с делегатами, параметры-типы интерфейсов могут быть либо 
контравариантными, либо ковариантными. Приведу пример интерфейса с контра-
вариантным параметром обобщенного типа:
public interface IEnumerator : IEnumerator {
Boolean MoveNext();
T Current { get; }
}
Контравариантность 
T
позволяет успешно скомпилировать и выполнить сле-
дующий программный код:


319
Обобщенные.методы
// Этот метод допускает интерфейс IEnumerable любого ссылочного типа
Int32 Count(IEnumerable collection) { ... }
...
// Этот вызов передает IEnumerable в Count
Int32 c = Count(new[] { "Grant" });

Download 6,27 Mb.

Do'stlaringiz bilan baham:
1   ...   223   224   225   226   227   228   229   230   ...   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