Использование общих списков на обслуживаемом компоненте

Я пытаюсь использовать общий список в качестве свойства класса ServicedComponent ...

public class MyCOM : ServicedComponent {
    public enum MyEnumType {
        Value1, Value2, Value3
    }
    public List<MyEnumType> MyList { private set; get; }
    public MyCOM()
    {
        MyList = new List<MyEnumType>();
    }
}

Код компилируется без ошибок, но когда я пытаюсь использовать свойство MyList для объекта com из другого класса, значения в список не добавляются. Google «сказал мне», что я не могу использовать универсальные шаблоны для компонентов, но я еще не нашел хорошего объяснения, почему это так, и хорошего решения проблемы.

Кто-нибудь может мне помочь?


person Ben    schedule 02.10.2008    source источник


Ответы (1)


Из MSDN:

Взаимодействие с использованием общих типов

Модель COM не поддерживает концепцию универсальных типов. Следовательно, универсальные типы нельзя использовать напрямую для взаимодействия с COM.

Ответ, почему универсальные шаблоны не поддерживаются, очень прост: универсальные шаблоны - это типы, которые создаются во время выполнения, и из-за этого нет объявления статического интерфейса для сконструированного типа, на который может ссылаться COM. В вашем случае List ‹MyEnumType> не существует как тип, пока среда CLR не создаст его, поэтому COM не может ссылаться на него с помощью идентификатора и (GUID).

Вот откуда приходит обходной путь: если ваши универсальные типы реализуют не общий интерфейс, то их можно использовать для взаимодействия с com, используя не общий интерфейс.

person Pop Catalin    schedule 02.10.2008