Ich schmeiß nochmal eine Frage hinterher. Wie geht man jetzt am besten
mit den Verweisklassen um? Diese brauche ich ja, um die DLL in meinem C#
Projekt verwenden zu können.
Wenn ich in meiner Klasse eine Methode schreibe, die den eigenen Typ
zurückgibt, z.B.
1 | Class1 Class1::GetCopy(void)
|
2 | {
|
3 | return Class1(var);
|
4 | }
|
... dann erhalte ich die Fehlermeldung
>> error C3073: "MyLib::Class1": Die Verweisklasse hat keinen benutzerdefinierten
>> Kopierkonstruktor.
Wenn ich so einen Kopierkonstruktor nach
https://de.wikipedia.org/wiki/Kopierkonstruktor erstelle, erhalte ich
wiederum eine Fehlermeldung.
1 | Class1::Class1(const Class1& c)
|
2 | {
|
3 | this->var = c.var;
|
4 | }
|
>> error C3699: "&": Diese Referenzierung kann nicht für den Typ "const
MyLib::Class1" verwendet werden.
Die Alternative dazu wäre dieses gcnew und ^ - Gedöns immer
mitzuschreiben.
(https://msdn.microsoft.com/de-de/library/vstudio/Ff429376.aspx)
1 | Class1^ Class1::GetCopy(void)
|
2 | {
|
3 | return gcnew Class1(var);
|
4 | }
|
So kann die DLL in C# verwendet werden.
Mir wäre die erste Wahl natürlich lieber, wenn ich nur einmalig so einen
Kopierkonstruktor implementieren müsste, und den Rest, wie in einer
nativen Klasse implementieren könnte. Was ist hierbei die gängige
Vorgehensweise? Welche Wahl ist evtl. mit weniger Rechenleistung
belastet?