Использование общих списков на обслуживаемом компоненте - PullRequest
0 голосов
/ 02 октября 2008

Я пытаюсь использовать общий список в качестве свойства класса 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 «сказал мне», что я не могу использовать Generics для компонентов, но мне еще предстоит найти хорошее объяснение, почему это так и хорошее решение проблемы.

Может ли кто-нибудь мне помочь?

1 Ответ

1 голос
/ 02 октября 2008

Из MSDN:

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

Модель COM не поддерживает Концепция общих типов. Следовательно, универсальные типы не могут быть используется непосредственно для COM-взаимодействия.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...