Array mit unterschiedlichen Objekten
-
Hi,
du kannst das Verfahren nur anwenden, wenn deine Klasse von Objekt erbt.
-
public class A { public Color color = Color.Green; } public class B { public Color color = Color.Yellow; }
Un dann in einer anderen Klasse:
A a = new A(); B b = new B(); object[] o = new object[] { a, b }; Color colorClassA = ( o[0] as A ).color; Color colorClassB = ( o[1] as B ).color;
-
Online schrieb:
Ixtana schrieb:
das geht aber nur weil alle die gleiche Basis Objekt haben oder?
jop...und da alle Klassen in .Net die Basisklasse Object haben, geht das mit jeder
gilt das auch für selbst definierte Klassen? (kann ich mir nicht so recht vorstellen) Wenn nein, warum ist Noodles sein Beispiel möglich?
-
Schau Dir doch mal eine Klasse aus meinem Beispiel an.
Was meinst Du, warum eine Instanz von z.B. A, Methoden wie GetType() oder ToString() besitzt?
-
hm hast recht.
-
Ixtana schrieb:
Online schrieb:
Ixtana schrieb:
das geht aber nur weil alle die gleiche Basis Objekt haben oder?
jop...und da alle Klassen in .Net die Basisklasse Object haben, geht das mit jeder
gilt das auch für selbst definierte Klassen? (kann ich mir nicht so recht vorstellen) Wenn nein, warum ist Noodles sein Beispiel möglich?
alle Klassen....auch deine eigenen
-
Erst mal vielen dank, hab jetzt auch folgende möglichkeit gefunden:
try { ((Klasse) ArrayvonKlassen[index]).MethodederKlasse(); } catch { // FEhler }
Damit gehts, nur achtet auf das try catch
Ansonsten gehts noch ganz gut mit
if(ArrayvonKlassen[index] is Klasse)
Hoffe das hilft anderen nach mir weiter
Alexander
-
Und 'as' hilft nicht?
-
Helium schrieb:
Und 'as' hilft nicht?
doch hilft wenn man weis wie
-
Immer die Exception zu fangen ist IMHO Unsinn, wenn man erwartet, dass in dem Array Objekte sind, die nicht zuweisungskompatibel sind.
Der einfache cast, der eine Exception wirft, ist für Fälle da, wo man erwartet, dass es immer gut ist. Wenn man beispielsweise einen String deserialisiert, gibt einen der Formatter nur object.
Da man aber einen String mit Sicherheit erwartet, kann man casten. Zum "ausprobieren" ist der Cast nicht gedacht.
-
the-architect schrieb:
Ich glaub das nennt man "Boxing", oder ist das wieder was anderes?
Is was anderes.
http://www.programmersheaven.com/articles/arun/boxing.htm