307
Обобщения.в.библиотеке.FCL
в производительности практически нет, обобщенный алгоритм обычно имеет
и другие преимущества.
ПриМеЧание
Необходимо.понимать,.что.CLR.генерирует.машинный.код.для.любого.метода.при.
первом.его.вызове.в.применении.к.конкретному.типу.данных .Это.увеличивает.размер.
рабочего.набора.приложения.и.снижает.производительность .Подробнее.об.этом.
мы.поговорим.чуть.позже.в.разделе.«Инфраструктура.обобщений»
Обобщения в библиотеке FCL
Разумеется, обобщения применяются с классами коллекций, и в FCL определено не-
сколько таких обобщенных классов. Большинство этих классов можно найти в про-
странствах имен
System.Collections.Generic
и
System.Collections.ObjectModel
.
Также имеются безопасные в отношении потоков классы коллекций в пространстве
имен
System.Collections.Concurrent
. Microsoft рекомендует программистам от-
казаться от необобщенных классов коллекций в пользу их обобщенных аналогов
по нескольким причинам. Во-первых, необобщенные классы коллекций, в отличие
от обобщенных, не обеспечивают безопасность типов, простоту и понятность кода
и повышение производительности. Во-вторых, объектная модель у обобщенных
классов лучше, чем у необобщенных. Например, у них меньше виртуальных мето-
дов, что повышает производительность, а новые члены, добавленные в обобщенные
коллекции, добавляют новую функциональность.
Классы коллекций реализуют множество интерфейсов, а объекты, добавляемые
в коллекции, могут реализовывать интерфейсы, используемые классами коллекций
для таких операций, как сортировка и поиск. В составе FCL поставляется множество
определений обобщенных интерфейсов, поэтому при работе с интерфейсами также
доступны преимущества обобщений. Большинство используемых интерфейсов
содержится в пространстве имен
System.Collections.Generic
.
Новые обобщенные интерфейсы не заменяют необобщенные: во многих ситуа-
циях приходится задействовать оба вида интерфейсов. Причина — необходимость
сохранения обратной совместимости. Например, если бы класс
List
реализо-
вывал только интерфейс
IList
, в коде нельзя было бы рассматривать объект
List<
DateTime>
как
IList
.
Также отмечу, что класс
System.Array
, базовый для всех типов масси-
вов, поддерживает множество статических обобщенных методов, в том числе
AsReadOnly
,
BinarySearch
,
ConvertAll
,
Exists
,
Find
,
FindAll
,
FindIndex
,
FindLast
,
FindLastIndex
,
ForEach
,
IndexOf
,
LastIndexOf
,
Resize
,
Sort
и
TrueForAll
. Вот как
выглядят некоторые из них:
public abstract class Array : ICloneable, IList, ICollection, IEnumerable,
IStructuralComparable, IStructuralEquatable {
продолжение
308
Do'stlaringiz bilan baham: |