Entwickler-Ecke
C# - Die Sprache - Array properties in C# ?
Codeexplorer - Do 01.02.07 19:22
Titel: Array properties in C# ?
Wieder mal so eine von Delphi nach C# Umsteiger- Frage:
In Delphi gibt es die Möglichkeit Arrays von Eigenschaften zu deklarieren
wie z.B.:
Delphi-Quelltext
1:
| property X[index: integer]: string read GetX write SetX; |
Gibt es etwas vergleichbares in C#? Auf der Suche nach Beispielen bin
ich auf Indizierer gestossen, aber das scheint mir nicht ganz das Gleiche
zu sein.
Wie kann man denn nun so etwas umsetzen ?
Christian S. - Do 01.02.07 19:30
Titel: Re: Array properties in C# ?
Codeexplorer hat folgendes geschrieben: |
Auf der Suche nach Beispielen bin
ich auf Indizierer gestossen, aber das scheint mir nicht ganz das Gleiche
zu sein. |
Indexer sind leider das, was dem an nächsten kommt. Wirkliche Array-Properties gibt es in C# nicht
Codeexplorer - Fr 02.02.07 11:03
Irgendwie sind mir diese Indexer etwas unhandlich.
Aber so etwas könnte man doch in eine eigene Klasse
packen.- Hier ein erster Versuch:
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: 39: 40: 41:
| class ArrayPropClass { private int maxCount = 100; private ArrayList privateArrayData; public ArrayPropClass(int maxItemsNum) { privateArrayData = new ArrayList(); maxCount = maxItemsNum; }
public int itemsCount { get { return privateArrayData.Count; } }
public object this[int index] { get { if (index < itemsCount) return (privateArrayData[index]); else throw new IndexOutOfRangeException("Maximaler Index bei get überschritten"); } set { if (index > maxCount - 1) throw new IndexOutOfRangeException("Maximaler Index bei set überschritten"); if (index < itemsCount) privateArrayData[index] = value; else { for (int i = itemsCount; ((i<index)&&!(i<0)); i++) { privateArrayData.Add(null); }; privateArrayData.Add(value); } } } } |
Das ist sicher noch nicht ganz zufriedenstellend.
Ich könnte mir vorstellen, daß sich das Ganze als Generic
noch etwas flexibler gestalten lässt. Ausserdem könnte man
dem Konstruktor ein Delegate übergeben, der die
Plausibiltätsprüfung usw. übernimmt.
Schließlich könnte man die Klasse so erweitern, daß das Array
mit einer foreach-Schleife durchlaufen werden kann.
Was haltet ihr von der ganzen Idee ?
Kha - Fr 02.02.07 13:53
Mit Delphis Array-Eigenschaften hat das aber nicht mehr viel zu tun, schließlich sind diese nur ein klein wenig Puderzucker über einen Getter und Setter. Der einzige Nachteil von Indexern ist die Tatsache, dass man eine neue Klasse anlegen muss. Und das muss ich sowohl mit als auch ohne Templateklasse, also ist eine solche ziemlich unsinnig, solange man sie nicht spezialisiert und an einen besonderen Collection-Typen anpasst. Deine Spezialisierung sieht mir nach einem Mittelding zwischen ReadOnlyCollection und Collection aus - eine fixed-Size Collection.
Codeexplorer - Mo 05.02.07 14:26
Khabarakh hat folgendes geschrieben: |
...Delphis Array-Eigenschaften ... sind ... nur ein klein wenig Puderzucker über einen Getter und Setter. |
Da gebe ich Dir recht.
Khabarakh hat folgendes geschrieben: |
...Deine Spezialisierung sieht mir nach einem Mittelding zwischen ReadOnlyCollection und Collection aus - eine fixed-Size Collection. |
Das solltest Du nicht so eng sehen. Das mit dem fixed-Size sollte ja nur ein Beispiel sein. Ich denke ja hier über eine flexiblere Lösung nach, bei der im Getter/Setter Delegates aufgerufen werden welche die Daten auf ganz individuelle Art und
Weise behandeln.
Khabarakh hat folgendes geschrieben: |
...Und das muss ich sowohl mit als auch ohne Templateklasse, also ist eine solche ziemlich unsinnig, solange man sie nicht spezialisiert und an einen besonderen Collection-Typen anpasst... |
Ich habe das mit dem Template mal so provokativ eingeworfen. Als Delphianer stecke ich da noch nicht so drin. Aber
wäre es nicht möglich, dann auch Plausibilitätsprüfungen zumindest teilweise generisch zu gestalten ?
Khabarakh hat folgendes geschrieben: |
Mit Delphis Array-Eigenschaften hat das aber nicht mehr viel zu tun... |
Mag sein. Aber wenn ich schon mit Indexern arbeiten muss, kann man ja mal darüber nachdenken, was man sonst noch so
damit anstellen kann...
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 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!