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

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

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

interface IOurClass { ReadonlyCollection OurCollection { get; } } interface IOurListObject { //Some properties that don't matter } 

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

我们也希望避免为我们使用的每个集合编写新类,但可能无法实现。

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

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

我希望自己有点清楚。

例:

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

看看这篇文章 。 使用直接数组或使用ArrayList。 看起来像向后退一步,但通用集合不适合COM。