Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
 Аватар для BadCats
2 / 2 / 1
Регистрация: 31.01.2016
Сообщений: 119

Содержимое интерфейса IEnumerable

31.08.2016, 12:38. Показов 1641. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет, хочу спросить насчет интерфейса IEnumerable, который как я понял используется при работе с коллекциями(я их только начал изучать), но тема не о коллекциях, а о содержимом вышеупомянутого интерфейса:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
namespace System.Collections
{
    // Сводка:
    //     Предоставляет перечислитель, который поддерживает простой перебор элементов
    //     неуниверсальной коллекции.
    [ComVisible(true)]
    [Guid("496B0ABE-CDEE-11d3-88E8-00902754C43A")]
    public interface IEnumerable
    {
        // Сводка:
        //     Возвращает перечислитель, осуществляющий итерацию в коллекции.
        //
        // Возвращает:
        //     Объект System.Collections.IEnumerator, который может использоваться для перебора
        //     коллекции.
        [DispId(-4)]
        IEnumerator GetEnumerator();
    }
Итак, по порядку, что мне не понятно:
строка
C#
1
[ComVisible(true)]
- как дает определение Visual Studio, когда навожу курсор настроку:
** class System.Runtime.Interop.Services.ComVisib leAttribute
Управляет доступгостьб отдельног управляемого типа или члена или всех типов в сборке для COM **
Итак, вопросы в студию:
  • InteropServices - ?
  • COM - это что вообще ?
  • ComVisibleAttribute - ?
  • что за ComVisible
    C#
    1
    
    [ComVisible(true)]
    - какую роль он выполняет
  • Управляемый тип\член ?
Умоляю дать подробный и развернутый ответ, без вот этого : "там есть некие механизмы, но так как ты сейчас только начал учить коллекции, то тебе это будет не нужно и даже мешать" - поверьте, мне нужно все. Отвечать на вопросы можно, даже нужно так, что бы эти разрозненные вопросы в итоге сформировали один комплексный ответ.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
31.08.2016, 12:38
Ответы с готовыми решениями:

Двойной проход по IEnumerable
В общем на практике довольно часто приходится бить кол-ции на равные блоки, а последний сколько останется. И, наконец, решился подумать как...

Как использовать значения, возвращаемые IEnumerable
Здравствуйте. Ситуация следующая (программа просто для того, что бы попробовать как работать с этой бд): у меня есть класс public...

System.Collections.IEnumerable; как его подключить?
int badhands ;//: System.Collections.IEnumerable; badhands =new int : System.Collections.IEnumerable; ...

3
 Аватар для skilllab
296 / 236 / 58
Регистрация: 03.02.2011
Сообщений: 2,045
Записей в блоге: 1
31.08.2016, 12:56
Лучший ответ Сообщение было отмечено BadCats как решение

Решение

Цитата Сообщение от BadCats Посмотреть сообщение
[ComVisible(true)]
Скорее всего значит то, что его может унаследовать объект COM - тот же ActiveX или любой другой объект неуправляемой памяти (лист с эксэльками, лист со вкладками из адоба к примеру)

COM-сервер — это специальным образом оформленное и зарегистрированное в системе приложение, которое позволяет клиентам запрашивать у себя создание реализованных в нем объектов. Сервер может быть выполнен в виде либо динамической библиотеки, либо исполняемого файла.

Добавлено через 31 секунду
Цитата Сообщение от BadCats Посмотреть сообщение
COM - это что вообще ?
https://ru.wikipedia.org/wiki/... ject_Model

Добавлено через 51 секунду
Цитата Сообщение от BadCats Посмотреть сообщение
[Guid("496B0ABE-CDEE-11d3-88E8-00902754C43A")]
Эта штука нужна для идентификации в системе. Штука обязательная как раз для COM объектов.
Другими словами и по американски
Interfaces are strongly typed. Every interface has its own unique interface identifier, named an IID, which eliminates collisions that could occur with human-readable names. The IID is a globally unique identifier (GUID), which is the same as the Universally Unique ID (UUID) defined by the Open Software Foundation (OSF) Distributed Computing Environment (DCE). When you create a new interface, you must create a new identifier for that interface. When a caller uses an interface, it must use the unique identifier. This explicit identification improves robustness by eliminating naming conflicts that would result in run-time failure.
ТУТ

Добавлено через 11 минут
Цитата Сообщение от BadCats Посмотреть сообщение
Interop
Оно же враппер (wrapper)
https://ru.wikipedia.org/wiki/COM_Interop
1
 Аватар для BadCats
2 / 2 / 1
Регистрация: 31.01.2016
Сообщений: 119
31.08.2016, 13:12  [ТС]
Далее:
C#
1
 [DispId(-4)]
Опять же, оределение Visual Studio
** class System.Runtime.InteropServices.DispldAtt ribute
Задает идентификатор диспетчирезации COM(DISPID) для метода, поля или свойства. **
  • идентификатор диспетчирезации COM(DISPID) - что!?
  • диспетчирезация COM - ?
  • DISPID - ?
И значит захожу я в этот
C#
1
 [DispId(-4)]
А там вот такое:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public sealed class DispIdAttribute : Attribute
    {
        // Сводка:
        //     Инициализирует новый экземпляр класса DispIdAttribute, используя указанный
        //     идентификатор DISPID.
        //
        // Параметры:
        //   dispId:
        //     Идентификатор DISPID для этого члена.
        public DispIdAttribute(int dispId);
 
        // Сводка:
        //     Возвращает идентификатор DISPID для члена.
        //
        // Возвращает:
        //     Идентификатор DISPID для этого члена.
        public int Value { get; }
    }
и как я понял, этот
C#
1
 [DispId(-4)]
- это конструктор класса DispIdAttribute ?
0
 Аватар для skilllab
296 / 236 / 58
Регистрация: 03.02.2011
Сообщений: 2,045
Записей в блоге: 1
31.08.2016, 13:35
Лучший ответ Сообщение было отмечено BadCats как решение

Решение

Цитата Сообщение от BadCats Посмотреть сообщение
DISPID - ?
Тупо идентификатор. Используется в неуправляемых сборках. Для NET является избыточным.
IDispatch = Как и любой обычный интерфейс, он реализован с помощью виртуальной таблицы указателей на методы. VMT интерфейса IDispatch начинается с трех хорошо известных методов IUnknown, за которыми следуют методы GetlDsOfNames, GetTypelnfo, GetTypelnfoCount и Invoke.
• Invoke (метод времени выполнения) — используется для вызова других методов Чтобы это было возможным, разработчик объекта, реализующего IDispatch должен определить, какие в точности методы будут доступны. Это достигается определением дополнительного диспетчерского интерфейса (dispatch interface), часто называемого диспинтерфейсом (dispinterface). Для его реализации VMT не используется. Каждому методу диспинтерфейса ставится в соответствие целое число — диспетчерский идентификатор (Dispatch IDentifier — DispID), no которому и производится вызов. Фактически реализация объектом метода Invoke является большим оператором Case.
Цитата Сообщение от BadCats Посмотреть сообщение
поверьте, мне нужно все.
Вот прям точно всё?
Вы собрались писать свой COM сервер на C#?

Добавлено через 2 минуты
Ещё про IDispatch
Запомните, что вам нужно понимать, что означают вещи в контексте вопроса. К примеру, у интерфейса IActiveMovie3 есть метод get_MediaPlayer. Если вы посмотрите на этот метод в сферическом вакууме (без принятия во внимание контекста), то вы будете ожидать, что метод вернёт вам интерфейс IMediaPlayer, но в заголовочнике вы увидите, что вместо этого метод возвращает интерфейс IDispatch. Если вы посмотрите на общую картину, то вы увидите, почему это имеет смысл.

IActiveMovie3 - это Dispatch интерфейс. Как вы знаете, целевой аудиторией для интерфейсов IDispatch являются скриптовые языки, вроде Visual Basic и JScript. Классический Visual Basic является языком с динамической типизацией, что означает, что практически все типы данных являются просто "объектами", а их точный тип не известен до момента выполнения скрипта. Статически-типизированный язык (вроде Delphi - прим.пер.) пожалуется вам ещё на этапе компиляции, если вы вызовете несуществующий метод у объекта или передадите параметр не того типа в метод. А динамически-типизированный язык, с другой стороны, не проверяет всё это, пока строка кода не будет выполнена - вот только в этот момент будет произведена проверка, существует ли метод и правильно ли вы указали параметры.

Когда вы работаете с интерфейсами и языками с динамической типизацией, то естественной "валютой" становится IDispatch. Все объекты принимают форму IDispatch. Объекты, которые порождают другие объекты, будут возвращать интерфейсы IDispatch, потому что именно их ожидает увидеть скриптовый движок.

Вот почему метод get_MediaPlayer возвращает IDispatch. Потому что это то, что ожидает скриптовый движок. И то, что, если вы знакомы с контекстом вопроса, ожидаете вы.

Сигнальный знак этого контекста происходит от названия метода "get_MediaPlayer". Это название не соответствует соглашению наименования COM, а, скорее, имя построено так для его binding-а в C/C++ на свойство "get". C/C++ binding - это "ассемблерный язык" автоматизации OLE: вы работаете с гайками и болтами OLE Automation, и если вы хотите играть на этом уровне, то вы должны знать, как использовать отвертку.
То же но на американском
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
31.08.2016, 13:35
Помогаю со студенческими работами здесь

Ошибка в логике реализации методов интерфейсов IEnumerator, IEnumerable
Здраствуйте. Програмирую на С# недавно. На данный момент изучаю книгу "C# и платформа .NET" от Эндрю Троелсен'а. Питер 2006. В...

Переменная типа IEnumerable. Как в subset сохраняются данные?
string currentVideoGames = { "Morrowind","Uncharted 2","Fallout 3","Daxter","System Shock 2"}; IEnumerable<string> subset = from g in...

Реализация интерфейса IEnumerable<T>
using System; using System.Collections.Generic; namespace Lists { /// &lt;summary&gt; /// Узел списка. /// &lt;/summary&gt; ...

Расширение интерфейса IEnumerable
Как возможно грамотно расширить этот интерфейс ? Надо что бы метод возвращал каждый второй элемент таблицы. Желательно с примерами =) ...

Реализация интерфейса IEnumerable<T>
Зачем при реализации интерфейса IEnumerable&lt;T&gt; кроме public IEnumerator&lt;T&gt; GetEnumerator() { return...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru