C#将类暴露给COM - 通用集合

时间:2009-12-07 19:58:34

标签: c# .net generics com generic-list

我们有一个用C#.Net 2.0编写的小框架,我们希望向COM公开。

问题是,我们有一些通用类可以公开如下:

interface IOurClass
{
  ReadonlyCollection<IOurListObject> OurCollection
  {
    get;
  }
}

interface IOurListObject
{
  //Some properties that don't matter
}

将通用集合暴露给COM的最佳(或推荐方法)是什么?我们不必支持泛型,我们只需要以某种方式公开IOurListObject的集合。

我们也希望避免为我们使用的每个集合编写一个新类,但这可能是不可能的。

2 个答案:

答案 0 :(得分:7)

不可能将通用集合(或任何其他“通用”的东西)暴露给COM。

因此,我建议您在COM-visible界面中创建一个非泛型属性(或方法)。 此方法可以返回'IOurListObject'项的数组。 在你的类中,你可以显式地实现这个方法,这样当你直接在COM之外引用对象时它就不会出现在你的intellisense中。

我希望自己有点清楚。

示例:

[ComVisible(true)]
public interface IOurClass
{
    IOurListObject[] OurCollection { get; }
}

public class OurClass : IOurClass
{
    IOurListObject[] IOurClass.OurCollection { get { return OurCollection.ToArray();} }

    public ReadOnlyCollection<IOurListObject> OurCollection { ... }
}

答案 1 :(得分:2)

结帐this post。使用直接数组或使用ArrayList。看起来像向后退一步,但是通用集合对COM不起作用。