【问题标题】: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 配合使用。