EnumerableComCollection<TComEnumerator,TEnumerated> Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Универсальный базовый класс для типов, которые предоставляют оболочку IEnumerable для интерфейсов IEnumXXX в стиле COM.
generic <typename TComEnumerator, typename TEnumerated>
public ref class EnumerableComCollection abstract : Microsoft::VisualStudio::Shell::IComEnumeratorRelay<TComEnumerator, TEnumerated>, System::Collections::Generic::IEnumerable<TEnumerated>
public abstract class EnumerableComCollection<TComEnumerator,TEnumerated> : Microsoft.VisualStudio.Shell.IComEnumeratorRelay<TComEnumerator,TEnumerated>, System.Collections.Generic.IEnumerable<TEnumerated>
type EnumerableComCollection<'ComEnumerator, 'Enumerated> = class
interface seq<'Enumerated>
interface IEnumerable
interface IComEnumeratorRelay<'ComEnumerator, 'Enumerated>
Public MustInherit Class EnumerableComCollection(Of TComEnumerator, TEnumerated)
Implements IComEnumeratorRelay(Of TComEnumerator, TEnumerated), IEnumerable(Of TEnumerated)
Параметры типа
- TComEnumerator
Тип перечислителя COM (например, IEnumString)
- TEnumerated
Тип, перечисляемый по TComEnumerator
(например, string)
- Наследование
-
EnumerableComCollection<TComEnumerator,TEnumerated>
- Производный
- Реализации
Комментарии
Классы, производные от этого класса, адаптируют интерфейс IEnumXXX в com-стиле в форму, которую можно обработать с помощью оператора foreach. В идеале этого универсального класса было бы достаточно само по себе без необходимости в производном классе для выполнения задания, но строгость, с которой должны быть определены универсальные шаблоны C#, предотвращает это.
Этот класс должен вызывать методы перечислителя COM, который он создает в оболочке (Next, Skip и т. д.), но универсальные типы могут обращаться только к свойствам и методам для их параметризованных типов, указанных в ограничениях параметризованных типов. В частности, мы можем вызвать TComEnumerator.Next, только если указать ограничение для TComEnumerator, которое сообщает компилятору, что TComEnumerator реализует Next.
Интерфейсы COM IEnumXXX строго типизированы (т. е. IEnumXXX.Next возвращает массив объектов XXX) и не имеют общего базового класса, поэтому мы не можем напрямую установить ограничение на TComEnumerator. Именно здесь происходит IComEnumeratorRelay: EnumerableComCollection требует, чтобы его производный класс реализовывал строго типизированный интерфейс IComEnumeratorRelay, который позволяет универсальному типу вызывать перечислитель COM без необходимости размещать ограничение на TComEnumerator.
Конструкторы
EnumerableComCollection<TComEnumerator,TEnumerated>(TComEnumerator) |
Инициализирует новый экземпляр EnumerableComCollection<TComEnumerator,TEnumerated> для предоставленного перечислителя. |
EnumerableComCollection<TComEnumerator,TEnumerated>(TComEnumerator, Int32) |
Инициализирует новый экземпляр EnumerableComCollection<TComEnumerator,TEnumerated> для предоставленного перечислителя и размера кэша. |
Поля
DefaultCacheSize |
Размер кэша по умолчанию. |
Методы
Clone(TComEnumerator, TComEnumerator) |
Клонирует элемент с указанным перечислителем . |
GetEnumerator() |
Возвращает перечислитель. |
NextItems(TComEnumerator, UInt32, TEnumerated[], UInt32) |
Получает указанное количество элементов. |
Reset(TComEnumerator) |
Сбрасывает счетчик в коллекции. |
Skip(TComEnumerator, UInt32) |
Пропускает указанное количество элементов. |
Явные реализации интерфейса
IEnumerable.GetEnumerator() |
Возвращает перечислитель. |
Методы расширения
EmptyIfNull<T>(IEnumerable<T>) |
Возвращать это перечисление в случае, если оно не равно NULL. Если значение равно NULL, возвращается пустое перечисление. |