Предоставление библиотеки DLL классов для COM с обобщениями - PullRequest
1 голос
/ 05 января 2010

Ради этого вопроса, вот мой общий класс.

[ComVisible(true)]
public class HtmlTable<T> where T : class
{
    List<T> listToConvert;

    public HtmlTable(List<T> listToConvert)
    {
        this.listToConvert = listToConvert;
    }
}

По сути, этот класс отвечает за преобразование Списка класса T в таблицу HTML (я не включил генерирующие разделы). Я получаю ошибку

Generic classes may not be exposes to COM.

Я прочитал несколько постов, касающихся этой проблемы, однако я не совсем их понимаю. Что нужно изменить / добавить, чтобы можно было использовать этот класс?

Спасибо.

1 Ответ

5 голосов
/ 05 января 2010

COM не имеет понятия Generics, поэтому классы Generic не могут быть доступны для COM.

Что вы можете сделать, это создать универсальный супертип, а затем создать неуниверсальные специфические реализации этого универсального супертипа для представления в COM.

Быстрый пример:

public class HtmlTable<T> where T : class 
{ 
    List<T> listToConvert; 

    public HtmlTable(List<T> listToConvert) 
    { 
        this.listToConvert = listToConvert; 
    } 
} 

[ComVisible(true)]
public class StringHtmlTable : HtmlTable<String>
{
    // implementation goes here
}
...