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


реализация интерфейсов IEnumerable



Download 6,27 Mb.
Pdf ko'rish
bet311/658
Sana12.06.2023
Hajmi6,27 Mb.
#950840
1   ...   307   308   309   310   311   312   313   314   ...   658
Bog'liq
CLR via C Programmirovanie na platforme Microsoft NET Framework 4 5 na yazyke C

реализация интерфейсов IEnumerable
ICollection и IList
Многие методы работают с коллекциями, поскольку они объявлены с такими 
параметрами, как интерфейсы 
IEnumerable

ICollection
и 
IList
. Им можно 
передавать и массивы, так как эти три необобщенных интерфейса реализованы 
в классе 
System.Array
. Данная реализация обусловлена тем, что эти интерфейсы 
интерпретируют любой элемент как экземпляр 
System.Object
. Однако хотелось 
бы также, чтобы класс 
System.Array
реализовывал обобщенные эквиваленты этих 
интерфейсов, обеспечивая лучший контроль типов во время компиляции и повы-
шенную производительность.
Команда разработчиков CLR решила, что не стоит осуществлять реализацию 
интерфейсов 
IEnumerable

ICollection
и 
IList
классом 
System.Array

так как в этом случае возникают проблемы с многомерными массивами, а также 
с массивами, в которых нумерация не начинается с нуля. Ведь определение этих 
интерфейсов в указанном классе означает необходимость поддержки массивов 
всех типов. Вместо этого разработчики пошли на хитрость: при создании одно-
мерного массива с начинающейся с нуля индексацией CLR автоматически реа-
лизует интерфейсы 
IEnumerable

ICollection
и 
IList
(здесь 
T
— тип 
элементов массива), а также три интерфейса для всех базовых типов массива 
при условии, что эти типы являются ссылочными. Ситуацию иллюстрирует 
следующая иерархия.
Object
Array (необобщенные IEnumerable, ICollection, IList)
Object[] (IEnumerable, ICollection, IList of Object)
String[] (IEnumerable, ICollection, IList of String)
Stream[] (IEnumerable, ICollection, IList of Stream)
FileStream[] (IEnumerable, ICollection, IList of FileStream)
.
. (другие массивы ссылочных типов)
.
Пример:
FileStream[] fsArray;
В этом случае при создании типа 
FileStream[]
CLR автоматически реали-
зует в нем интерфейсы 
IEnumerable

ICollection
и 
IList
. Более того, тип 
FileStream[]
будет реализовывать ин-
терфейсы базовых классов 
IEnumerable

IEnumerable

ICollection

ICollection

IList
и 
IList



425
Передача.и.возврат.массивов
Так как все эти интерфейсы реализуются средой CLR автоматически, переменная 
fsArray
может применяться во всех случаях использования этих интерфейсов. 
Например, ее можно передавать в методы с такими прототипами:
void M1(IList fsList) { ... }
void M2(ICollection sCollection) { ... }
void M3(IEnumerable oEnumerable) { ... }
Обратите внимание, что если массив содержит элементы значимого типа, класс, 
которому он принадлежит, не будет реализовывать интерфейсы базовых классов 
элемента. Например:
DateTime[] dtArray; // Массив элементов значимого типа
В данном случае тип 
DateTime[]
будет реализовывать только интерфейсы 
IEnumerable

ICollection
и 
IList
; версии этих 
интерфейсов, общие для классов 
System.ValueType
или 
System.Object
, реализованы 
не будут. А это значит, что переменную 
dtArray
нельзя передать показанному ранее 
методу 
M3
в качестве аргумента. Ведь массивы значимых и ссылочных типов рас-
полагаются в памяти по-разному (об этом рассказывалось в начале данной главы).

Download 6,27 Mb.

Do'stlaringiz bilan baham:
1   ...   307   308   309   310   311   312   313   314   ...   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