Entwickler-Ecke
Basistechnologien - in einer Liste (List) verschiedene Objekte verwalten?
Foxi23 - Fr 29.01.10 18:59
Titel: in einer Liste (List) verschiedene Objekte verwalten?
Hallo,
Ich möchte ein Programm schreiben, daß Vectorgrafik enthalten soll.
Hierzu währe es günstig, wenn ich die verschiedenen Grafik-Objekte in einer Liste verwalten könnte. Meine Datenstruktur sieht etwa so aus:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38:
| public class CGraficObjekt { protected int Objektart; protected Point p1, p2, p3, p4; protected int breite, hoehe; protected Pen linien = new Pen(Color.DarkGray); protected SolidBrush fuellungFarbe = new SolidBrush(Color.Red); protected long anfanszeit; protected int legende; } public class CLinie : CGraficObjekt { public int pfeil1, pfeil2; } public class CFlaesche : CGraficObjekt { public Point TextEinfügepunkt; public enum EFlArt : byte { Rechteck = 0, Kreis, Dreieck , Elypse }; public Font schrift = new Font("Arial", 9); } public class CText : CGraficObjekt { public int pfeil1, pfeil2; public Font schrift = new Font("Arial", 9); } public class CBild : CGraficObjekt { public Image bild; } public class CPolylinie : CGraficObjekt { public Point [] punkte = new Point [99]; } |
Also eine Basis-Classe und dann verschiedene Grafikobjekte, die von der Basis-Classe abgeleitet sind.
Frage: geht das, das man die in einer Liste verwalten kann.
Ich dachte mir so, aber das gibt eine Fehlermeldung
C#-Quelltext
1:
| public static System.Collections.Generic.List<CLinie, CBild, CFlaesche, CPolylinie, CText> objektliste = new System.Collections.Generic.List<CLinie, CBild, CFlaesche, CPolylinie, CText>(); |
So das man beim einlesen das Feld Objektart ausliest, und dann mit der passenden Objekt-Classe weiter ausliest (Entschuldigung für das 3x lesen/liest)
Währe auch dankbar für einen Tipp, wenn ich hier einen völlig falschen "Ansatz" habe.
bis dann
Foxi23
JüTho - Fr 29.01.10 19:11
Foxi23 hat folgendes geschrieben : |
Also eine Basis-Classe und dann verschiedene Grafikobjekte, die von der Basis-Classe abgeleitet sind.
Frage: geht das, das man die in einer Liste verwalten kann. |
Viel einfacher:
C#-Quelltext
1:
| List<CGraficObjekt> list = new List<CGraficObjekt>(); |
Dann dürfen in diese Liste genau die CGraficObjekt-Instanzen sowie davon abgeleitete Instanzen eingetragen werden. Du hast lediglich das Problem, dass du bei Bedarf das jeweilige Objekt casten musst:
C#-Quelltext
1: 2:
| CLinie line = list[23] as CLinie; if( line != null ) { ... } |
Übrigens solltest du deine Bezeichnungen überprüfen: Grafic mit c, Objekt mit k, dazu das C am Anfang - so muss das nicht sein. Siehe
NET Richtlinien für Namen [
http://msdn.microsoft.com/de-de/library/ms229002(VS.80).aspx].
Gruß Jürgen
Foxi23 - Fr 29.01.10 19:28
Jürgen........ danke dir,
werden das gleich ausprobieren,
bis dann
der Eisenmann
Foxi23 - So 31.01.10 15:34
OK, Entschuldigung wegen dem Doppel-Post,
mach´s nicht wieder.
Ich hatte halt Panik gekriegt, bin nicht weiter gekommen.
Und wieder danke, jetzt klappt´s genauso wie ich das haben wollte.
bis dann Foxi23
Christian S. - So 31.01.10 16:03
Zur Info: Crossposts sind bei uns durchaus erlaubt, Du solltest halt nur auf den Thread im anderen Forum verlinken, damit sich niemand Arbeit mit einer Antwort macht, die woanders schon steht. :-)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!