Ein paar Fragen zu interfaces!
-
1. Wie mache ich eine Interfaceklasse
2. Wie werden Klassen, die Interfaces als basis haben, in Interface arrays gespeichertUnd noch mal so:
3. Kann man in C++/Cli noch dem Compiler eine Klasse vorher bekannt machen, wenn ja wie?
-
zu1: Wenn ichs richtig im Kopf hab:
public interface class myClass
zu2: Was verstehst du unter Interface array? Von einer Interface Klasse kannst du doch gar kein Objekt erstellen, nur von einer davon abgeleiteten Klasse!
zu3: Versteh die Frage nicht...
MFG
Dappeljuh
-
zu 1. Es gibt keine interfaceklassen. Es gibt interfaces und klassen. Aber keine interfaceklassen. Höchstens klassen die interfaces implementieren.
zu 2. man hat keine interfaces als basis im sinne von basisklassen wie bei der vererbung. Klassen können wie gesagt interfaces implementieren und dann ist das mit den arrays genauso wie mit jedem anderen typ. Wenn du ein array von typ interfacexyz hast kannst du einfach objekte einer klasse die das interface implementieren dem array zuweisen.
wie das alles in c++ aussieht weiß ich net, bin c# entwickler, aber .net sprache bleibt .net sprache was die prinzipien angeht.
zu 3. C++/cli ist immer noch c++, also klassendefinition in header und header da einbinden wo benötigt.
-
man hat keine interfaces als basis im sinne von basisklassen wie bei der vererbung
Ich stelle mal die Behauptung auf, das ein Interface einer reinen virtuellen Klasse am nähsten kommt. Also kann ich als Basis durchaus ein Interface haben und dieses verwenden.
Der Rest ist Vererbung , man schreibt (in C#) halt das virtual nicht davor. Aber am Ende ist es einfach nur eine Klasse die reine virtuelle Methoden anbietet aber keine Implementierung.
public interface test { void x(); } public class A : test { #region test Member public void x() { } #endregion } test basis = new A(); basis.x();
-
Vielen Dank für die Antworten
Noch mal zu 3.
Hab letztens folgendes versucht:namespace XYZ{ public ref class A; public ref class B; puplic ref class A { B^ mB; ... } }
Dann hat aber der Compiler gemeckert, ich sollte public von der definition entfernen, was ich auch gemacht habe. Dann hat er aber rumgemeckert, das kein geeigneter Konstruktor gefunden wurde, dabei hatte ich einen in der Klasse
Ich kanntes halt noch vom "alten" C++, aber hier isses anscheinend anders
-
namespace xyz { ref class A; ref class B; public ref class A { B ^ b; public: A(); }; }
lässt sich ohne Probleme oder Meldungen übersetzen.
-
Ja so hatt ichs ja auch, aber irgendwie war dem dann mein Construltor nicht bekannt