C # exposant la classe à COM – Collections génériques

Nous avons un petit cadre écrit en C # .Net 2.0 que nous voulons exposer à COM.

Le problème est que nous avons des classes génériques qui seraient exposées comme suit:

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

Quel est le meilleur moyen (ou le moyen recommandé) d’exposer les collections génériques à COM? Nous n’avons pas besoin de prendre en charge les génériques, nous avons simplement besoin d’exposer une collection de IOurListObject.

Nous aimerions également éviter d’écrire une nouvelle classe pour chaque collection que nous utilisons, mais cela n’est peut-être pas possible.

Il n’est pas possible d’exposer des collections génériques (ou tout autre élément “générique”) à COM.

Donc, je vous suggère de créer une propriété (ou une méthode) non générique dans votre interface visible par COM. Cette méthode peut renvoyer un tableau d’éléments ‘IOurListObject’. Dans votre classe, vous pouvez implémenter explicitement cette méthode afin qu’elle n’apparaisse pas dans votre intellisense lorsque vous faites référence à l’object directement en dehors de COM, par exemple.

J’espère me rendre 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 OurCollection { ... } } 

Découvrez ce post . Utilisez un tableau simple ou une liste de tableaux. Cela ressemble à un pas en arrière, mais les collections génériques ne fonctionnent pas bien avec COM.