2017-11-27 7 views
1

Ich habe eine Basis C++/CX-Klasse, die nicht versiegelt ist. Und ich habe eine Reihe von Klassen, die von dieser Basisklasse erben, die versiegelt sind. Ich frage mich, wie ich auf die nicht versiegelte Basisklasse in C# verweise, um eine C# -Auflistung der versiegelten Klassen zu erstellen.Verweisen Sie auf die Basisklasse (nicht versiegelt), um eine Sammlung von versiegelten Klassen zu erstellen

C++/cx:

ref class ConcreteClass sealed : AbstractBaseClass (a.k.a not sealed) 

C#:

public static ObservableCollection<AbstractBaseClass> MyObjectCollection; 
+0

Warum ist das wichtig? Welches Problem verursacht (oder erlaubt)? Die abstrakte Klasse ist die einzige gemeinsame Basisklasse, daher gibt es vom Standpunkt der OO aus keinen Hinweis darauf, dass die Sammlung nur versiegelte Typen enthält. –

+0

Das Problem ist, dass ich keine C# -Ansammlung vom Typ 'Basisklasse' erstellen kann. Zum Beispiel habe ich eine Basisklasse "Frucht" und möchte eine Sammlung aller meiner Früchte haben. 'Bananen',' Äpfel' etc ... nicht sicher, warum es mich das nicht lässt. – visc

+2

Was ist der Fehler oder die Warnung? – NetMage

Antwort

1

C++/CX lassen Sie nicht haben eine öffentliche, nicht-versiegelte Klasse, es sei denn es ist ein XAML-Typ (basierend auf DependencyObject ist - etwas, das Sie wahrscheinlich tun nicht wollen).

Die einfache Lösung besteht darin, Ihre AbstractBaseClass stattdessen als öffentliche Schnittstelle verfügbar zu machen, und dann kann C# sie verwenden und die Auflistung des Schnittstellentyps erstellen (in dem Sie die konkreten Klassen speichern können).

Verwandte Themen