2009-12-07 99 views
3

我們有一個用C#.Net 2.0編寫的小框架,我們想要暴露給COM。C#暴露類COM - 泛型集合

問題是,我們將公開爲下面的一些通用類:

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

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

什麼是揭露泛型集合到COM最佳(或推薦的方式)?我們不必支持泛型,我們只需要以某種方式公開IOurListObject的集合。

我們也希望避免爲每個我們使用的集合編寫一個新的類,但它可能是不可能的。

+0

重複:http://stackoverflow.com/questions/269581/what-are-alternatives-to-generic-collections-for-com-interop – 2009-12-07 20:08:59

回答

7

向COM公開泛型集合(或任何其他「通用」的東西)是不可能的。

所以,我建議你在COM可見接口中創建一個非泛型屬性(或方法)。 該方法可以返回'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 { ... } 
} 
2

結賬this post。使用直接向前的數組或使用ArrayList。看起來像是倒退了一步,但通用集合對COM沒有好處。