使用泛型将类库DLL暴露给COM

时间:2010-01-05 20:18:03

标签: c# generics .net-3.5 com

为了这个问题,这是我的通用类。

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

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

本质上,这个类负责将类T的List转换为HTML表(我省略了生成部分)。我得到的错误是

Generic classes may not be exposes to COM.

我已经阅读了几篇关于这个问题的帖子,但是我并不是真的了解它们。需要更改/添加什么才能使用此类?

谢谢。

1 个答案:

答案 0 :(得分:5)

COM没有泛型的概念,因此通用类不能暴露给COM。

您可以做的是创建一个Generic超类型,然后创建该Generic超类型的非泛型特定实现以向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
}