【问题标题】:C# exposing class to COM - Generic CollectionsC# 向 COM 公开类 - 通用集合
【发布时间】:2009-12-07 19:58:34
【问题描述】:

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

问题是,我们有一些通用类会暴露如下:

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

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

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

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

【问题讨论】:

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


【解决方案1】:

不可能向 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 { ... }
}

【讨论】:

    【解决方案2】:

    查看this post。使用直接数组或使用 ArrayList。看起来像是倒退了一步,但泛型集合不能很好地与 COM 配合使用。

    【讨论】:

      猜你喜欢
      • 2015-03-21
      • 2015-06-29
      • 1970-01-01
      • 2012-09-20
      • 2011-01-01
      • 2021-06-02
      • 1970-01-01
      • 2010-12-31
      • 1970-01-01
      相关资源
      最近更新 更多