Поделиться через


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, возвращается пустое перечисление.

Применяется к