2009-12-07 12 views
3

Nous avons une petite structure écrite en C# .Net 2.0 que nous voulons exposer à COM.C# exposer la classe à COM - Collections génériques

Le problème est, nous avons des classes génériques qui seraient exposées comme les suivantes:

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

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

Quelle est la meilleure pour exposer les collections génériques à COM (ou méthode recommandée)? Nous n'avons pas besoin de soutenir les génériques, nous avons juste besoin d'exposer en quelque sorte une collection de IOurListObject. Nous aimerions également éviter d'avoir à écrire une nouvelle classe pour chaque collection que nous utilisons, mais ce n'est peut-être pas possible.

+0

double: http://stackoverflow.com/questions/269581/what-are-alternatives-to-generic-collections-for-com-interop –

Répondre

7

Il n'est pas possible d'exposer des collections génériques (ou tout autre élément générique) à COM. Par conséquent, je vous suggère de créer une propriété (ou une méthode) non générique dans votre interface COM-visible. Cette méthode peut renvoyer un tableau d'éléments 'IOurListObject'. Dans votre classe, vous pouvez implémenter cette méthode explicitement, afin qu'elle n'apparaisse pas dans votre intellisense lorsque vous faites référence à l'objet directement en dehors de COM, par exemple.

J'espère que je me rends un peu clair.

Exemple:

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

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

    public ReadOnlyCollection<IOurListObject> OurCollection { ... } 
} 
2

Découvrez this post. Utilisez un tableau direct ou utilisez une ArrayList. Cela ressemble à un retour en arrière, mais les collections génériques ne sont pas sympa avec COM.