Array mit unterschiedlichen Objekten
-
hi
Ich steh vor einem kleinen Problem, und zwar will ich ein Array haben, in dem je nach Stelle ein anderes Objekt ist, so das zum Beisspiel Obj[0] von der Klasse Farbe ein objekt beinhaltet, Obj[1] von der Klasse Struktur.
Wenn mir irgend wer helfen könnte wär das echt klasse
Alexander
-
Soweit ich weiss geht sowas mit Arrays nicht. Ich glaub für sowas braucht man Listen.
-
Color color = Color.Red; Font font = new Font("Arial", 11); object[] o = new object[] { color, font };
-
oh geht doch. Wieder was dazugelernt
-
Ixtana schrieb:
oh geht doch. Wieder was dazugelernt
und mit
Font font = o[1] as Font;
kannst du dann alle Objekte zurückwandeln
mit
if(o[0] is Color) //Tue wat
kannst du abfragen ob es sich um die Klasse handelt die du suchst
-
das geht aber nur weil alle die gleiche Basis Objekt haben oder?
-
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
-
Ich glaub das nennt man "Boxing", oder ist das wieder was anderes?
-
Erst mal vielen dank,
kann ja jetzt sein das ich mich einfach nur zu doof anstelle, aber wenn ich das jetzt so mache
Klasse obj = new Klasse(); Klasse2 obj2 = new Klasse2(); object[] o = new object[] { obj, obj2 };
und meine Klassen z.B. die Variable Farbe haben ( auf public) bekomme ich den Fehler object enthält keine Definition für Farbe.
Kann ich object irgendwie auch ne Variable namens Farbe geben oder habt ihr sonst ne idee, wäre echt nettAlexander
-
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