Von Object abgeleitete Klasse dem Tag-Member eines Steuerelements zuordnen
-
Hallo, laut Hilfe kann man folgendes schreiben:
button->Tag = gcnew MyClass;
sofern MyClass eine von Object abgeleitete Klasse ist.
Ich habe nun MyClass kreiert. Wenn ich nun schreibe:
MyClass^ x;
x = gcnew MyClass;
x->....
stehen mir sowohl die Member von Object als auch meine Eigenen zur Verfügung.
Verwende ich das o.g. Construct (lt. Hilfe) stehen mir mit
button->Tag->....
nur die Member von Object zur Verfügung also meine Eigenen nicht.
Ich bin leicht verwirrt, was mache ich falsch???
Danke im Voraus (und natürlich noch ein Gutes Neues Jahr)
-
Du siehst nur die Member der Klasse, die es auch wirklich ist.
Da Tag vom Typ System::Object ist, wirst Du einen cast brauchen um Tag zu dem zu machen, was es eigentlich sein soll.
Beispiel:
ref struct MyClass { int m1; int m2; }; button->Tag = gcnew MyClass; button->Tag->m1 = 12; // Fehler, m1 kein Member von System::Object safe_cast<MyClass^>(button->Tag)->m1 = 12; // Ok
Details siehe Vererbung und Basisklassen. (Besonders interesannt wird es dann im zusammenhang mit virtual)
-
Habe es mir schon gedacht, dass das wieder was mit irgendeinem cast zu tun hat.
Ok werde mich jetzt erst mal grundlagentechnisch damit befassen und hoffe, dass sich meine Frage damit von selbst beantwortet. Irgendwie habe ich dass mit den casts auf die Schnelle bis jetzt nicht so richtig gecheckt, darum ran an die Arbeit.
Gruss Walter
-
Hierzu aber nicht nur das Thema Cast lesen, auch das Thema Vererbung angehen. Mit dem Wissen um Basisklassen etc. wird Dir das .Net, in dem oft der Kram als Oject zurück gegeben oder angenommen wird, deutlicher