3

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

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

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

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

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

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

4

2 回答 2

7

不可能向 COM 公开通用集合(或任何其他“通用”的东西)。

因此,我建议您在 COM 可见界面中创建一个非泛型属性(或方法)。此方法可以返回“IOurListObject”项的数组。例如,在您的类中,您可以显式地实现此方法,这样当您直接在 COM 外部引用对象时,它就不会出现在您的智能感知中。

我希望我让自己清楚一点。

例子:

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

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

    public ReadOnlyCollection<IOurListObject> OurCollection { ... }
}
于 2009-12-07T20:03:24.690 回答
2

看看这篇文章。使用直接数组或使用 ArrayList。似乎是倒退了一步,但泛型集合不能很好地与 COM 配合使用。

于 2009-12-07T20:01:16.677 回答