Explpizite Konvertierung von Base zu Derived
-
hallo,
also ich habe folgende konstellation:
class A
class B : Adie konvertierung
B b;
A a = b;
... funktioniert natuerlich,
bzw. die konvertierung
A a;
B b = a;
... funktioniert natuerlich nichtnun habe ich in die klasse B einen expliziten konvertierungs-operator eingebaut:
public static explicit operator B (A a)
{ ...}leider laesst sich der code so nicht kompilieren. es kommt die meldung:
D:\...: 'Test1.B.explicit operator Test1.B(Test1.A)': benutzerdefinierte Konvertierung zu/von der Basisklasseweiss jemand, was man hier machen kann?
mfg abs
-
Hast du dir vielleicht schon mal überlegt, was explicit in diesem Zusammenhang bedeutet? Ich würde meinen, dass man den Operatoren explizit aufrufen muss, damit es funktioniert. Für deine Zwecke könnte man explicit einfach weglassen, damit es problemlos kompiliert
. Sowas nennt man dann implicit...
-
stimmt, man muss den operator explizit aufrufen. das waere dann
B b = (B) a;aber wie gesagt laesst sich der code so nicht kompilieren und es erscheint die besagte fehlermledung. (d.h. er laesst sich nicht kopmilieren, wenn/weil der besagte operator explizit eingebunden ist)
die anweisung ...
B b = a;
... laesst sich auch nicht kompilieren, da sich 'base' nicht implizit zu 'derived'
konvertieren laesst.
-
Du kannst nicht von base zu derived casten. Du musst entweder in Klasse-A eine ToB-Methode implementieren, die eine neue Instanz von B erzeugt und dem Konstruktor dabei alle relevanten Daten übergibt. Oder du erstellst eine weitere Klasse die von A abgeleitet wird, aber im Prinzip sich nicht von A unterscheidet. Dann kannst du den cast von dieser Klasse zu B überladen.
-
OK, danke erstmal!
Habe mein konzept jetzt so ueberarbeitet, dass die konvertierung nicht mehr noetig ist.