Autor Beitrag
Codeexplorer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 39



BeitragVerfasst: Do 01.02.07 19:22 
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.:
ausblenden 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Do 01.02.07 19:30 
user profile iconCodeexplorer 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

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Codeexplorer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 39



BeitragVerfasst: 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:
ausblenden volle Höhe 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 - 1throw 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 39



BeitragVerfasst: Mo 05.02.07 14:26 
user profile iconKhabarakh hat folgendes geschrieben:
...Delphis Array-Eigenschaften ... sind ... nur ein klein wenig Puderzucker über einen Getter und Setter.

Da gebe ich Dir recht.

user profile iconKhabarakh 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.

user profile iconKhabarakh 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 ?

user profile iconKhabarakh 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...