ERLEDIGT
JA
JA
ANTWORTEN
4
4
ZUGRIFFE
1217
1217
EMPFEHLEN
-
Ich habe eine abstrakte Klasse geschrieben:
Code csharp: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 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
using System; using System.Collections.Generic; using System.Drawing; using System.Text; namespace BatchSort.Graphic { public abstract class GraphicUnits { private Pen _pen; public Pen Pen { get { return _pen; } set { _pen = value; } } private Brush _brush; public Brush Brush { get { return _brush; } set { _brush = value; } } private bool _fVisible = true; public bool Visible { get { return _fVisible; } set { _fVisible = value; } } private Color _fillColor; public Color FillColor { get { return _fillColor; } set { _fillColor = value; } } private Point _location; public Point Location { get { return _location; } set { _location = value; } } private int _blockcount; public int Blockcount { get { return _blockcount; } set { _blockcount = value; } } public GraphicUnits(Pen pen) { _pen = pen; } public GraphicUnits(Color brush) { _brush = new SolidBrush(brush); _fillColor = brush; } public GraphicUnits() { } public abstract void Draw(Graphics g); public abstract bool Contains(Point pt); } }
Nun habe ich eine zweite Klasse geschrieben, welche von der da oben erbt und die abtrakten Methoden überschreibt:
Wenn ich nun eine Instanz der Klasse RouterUnit mache, dann habe ich zwar zugriff auf die Properties der abstrakten Klasse jedoch kein Zugriff auf das Property "MyProperty".Code csharp: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 39 40 41
using System; using System.Collections.Generic; using System.Text; using System.Drawing; namespace BatchSort.Graphic { public class RouterUnit : GraphicUnits { private int _myProperty public int MyProperty { get { return _myProperty; } set { _myProperty= value; } } private Bitmap image = new Bitmap(@"Images\\batchUnit.gif", true); public RouterUnit(Point pt) : base() { Location = pt; } public override void Draw(Graphics g) { /* ... irgendein Code ...*/ } public override bool Contains(Point pt) { /* ... irgendein Code ...*/ } } }
Woran liegt das?
Zum anderen bräuchte ich das, da ich mehrere Klassen von der abtrakten erbe und in den darunterliegenen Klassen nunmal einige Properties nicht in alle vorhanden sein sollen und ich somit das nicht einfach in die abstrakte Klasse mit reindefinieren sollte.
Welche Möglichkeiten habe ich?Geändert von Razorhawk (11.07.07 um 14:10 Uhr)
-
11.07.07 13:58 #2
- Registriert seit
- Aug 2001
- Ort
- Österreich, Stmk, Graz
- Beiträge
- 2.783
Code csharp:
Wie wolltest denn auf die Property zugreifen? Variante 1 oder 2?
2 geht, 1 nicht..
Ansonsten wüsst ich grad nicht, warum MyProperty nicht zugreifbar sein sollte..
lg, AlexWith the first link the chain is forged. The first speech censored, the first thought forbidden, the first freedom denied, chains us all irrevocably.
Aaron Satie
Legends... are the spice of the universe, Mr. Data, because they have a way of sometimes coming true.
Captain Jean-Luc Picard, Stardate ~41294.5
Tutorials.de chattet. Hier gibts auch .net Support ^^
Klickt auf chattet und nutzt den Webchat, oder verbindet euch zu irc.tutorials.de - Channel #Tutorials.de
(moo)blog furred.net // SiteInfo für WP7 // Pastebin für WP7 // BlogEngine.net Extensions
-
Ah okay das ist der Fehler, ich kann die aber auch sagen, warum ich glaube Variante 1 nehmen zu müssen.
Ich verwende eine
bei der malCode csharp:1
List<Graphicunits> liste = new List<GraphicUnits>();
und malCode csharp:1
liste.Add(new RouterUnit(...));
verwendet wird, wobei Buffer eine andere Klasse ist die von der abstrakten ableitet.Code csharp:1
liste.Add(new BufferUnit(...));
Von daher habe ich das Problem es wie bei der ersten Variante bisher machen zu müssen.
Um genauer zu erklären was der sinn der Sache ist.
Ich habe eine ArrayList mit
,Code csharp:1
List<GraphicUnits>
die zusammen eine n*m Matrix ergeben. es werden an unterschiedlichen Stellen beide Klassen in den Listen gespeichert.
Es ist nicht zufällig und die Reihenfolge einspricht einem eindeutigen Muster.
-
11.07.07 14:27 #4
- Registriert seit
- Aug 2001
- Ort
- Österreich, Stmk, Graz
- Beiträge
- 2.783
Okay,.. Variante 1 bzw. deine Speicherung ist ja kein Problem..
Nur wenn du das Objekt als z.b RouterUnit benutzen willst, mussts auch als solches haben.
Code csharp:1 2 3 4 5 6 7 8
GraphicsUnit gu = new RouterUnit(); RouterUnit ru = gu as RouterUnit; if (ru != null) { ru.MyProperty = ..; }
Mit dem "as" Operator machst du einen cast in den angegebenen Typ wobei überprüft wird, ob das mit den 2 Typen auch funktioniert. Wenns nicht geht, bekommst einfach null zurück, ohne das eine Exception fliegt.With the first link the chain is forged. The first speech censored, the first thought forbidden, the first freedom denied, chains us all irrevocably.
Aaron Satie
Legends... are the spice of the universe, Mr. Data, because they have a way of sometimes coming true.
Captain Jean-Luc Picard, Stardate ~41294.5
Tutorials.de chattet. Hier gibts auch .net Support ^^
Klickt auf chattet und nutzt den Webchat, oder verbindet euch zu irc.tutorials.de - Channel #Tutorials.de
(moo)blog furred.net // SiteInfo für WP7 // Pastebin für WP7 // BlogEngine.net Extensions
-
Einbandfrei gelöst danke!
Ähnliche Themen
-
konkrete Klassen - abstrakte Klassen
Von Miasto71 im Forum JavaAntworten: 1Letzter Beitrag: 28.03.10, 00:18 -
Abstrakte Klassen und Objekte von andere public Klassen
Von Sirakov im Forum JavaAntworten: 2Letzter Beitrag: 05.07.06, 14:55 -
Vererbung mit abstrakten Klassen
Von PeteProgram im Forum JavaAntworten: 5Letzter Beitrag: 28.06.05, 11:54 -
Eventhandler: innere Klassen vs. "normale Klassen"
Von AKST im Forum JavaAntworten: 16Letzter Beitrag: 27.09.04, 19:57 -
Klassen und Properties
Von Toddi im Forum .NET ArchivAntworten: 6Letzter Beitrag: 28.08.04, 17:04





Zitieren

Login




