Hallo,
habe folgende Frage:
kann man Klasseneigenschaften auch indizieren, so wie es ähnlich mit dem Indexer für
Klassen geht?
Hier mal ein Beispiel in ObjectPascal (weil ich lange in OP programmiert habe und weiß, wie
das dort geht ... sorry😉).
property SomeArrayProperty[index1:TIndexType]:TDatatype read GetProb;
//Dekleration
function GetProb(index: Integer): String //Hole aus einer Collection einen wert
In C# könnte das also vieleicht so aussehen:
public DataType SomeArrayProperty
{
get
{
return someArrayList ;
}
}
Gibt es sowas in C#?
Mfg
Holger
Die Eulen sind nicht was sie scheinen!
Nein, nur in VB.NET. Weiss der Himmel warum.
Hallo faehne,
aber du kannst in C# das Array selbst zurückgeben. Dann kann der Aufrufer über den Index zugreifen.
public DataType [] SomeArrayProperty
{
get { return someArrayList; }
}
// Benutzung:
myobj.SomeArrayProperty [i] = 15;
herbivore
Oder eine Klasse ArrayItems erstellen, welches das Property zurückgibt und diese Klasse hat einen Indexer.
Eine Ausnahme gibt es.
Du kannst etwas wie das Defaultproperty von VB.NET auch haben, nennt sich indexer.
class IndexerClass
{
private int[] arr = new int[100];
public int this[int index] // Indexer declaration
{
get
{
// Check the index limits.
if (index < 0 || index >= 100)
{
return 0;
}
else
{
return arr[index];
}
}
set
{
if (!(index < 0 || index >= 100))
{
arr[index] = value;
}
}
}
}
Hab das jetzt erstmal so gelöst,
wie herbivore geschrieben hat.
das mit dem Indexer wusste ich schon, bring mir
aber nix da ich ja folgendes BeispielKonstrukt erreichen möchte:
Dekl. in Klasse Container:
private ArrayList somearrayList; //enthält elemente Person mit dem Attribut PersonenName
Aufruf außerhalb:
someContainer.PersonenName[index]
Wäre natürlich ne Idee für die Zukunft das in c#
aufzunehmen
Totzdem vielen Dank
Mfg
faehne
Die Eulen sind nicht was sie scheinen!
Du könntest doch auch den (Index)-Operator überladen.
Beispiel siehe hier: http://www.aspfree.com/c/a/C-Sharp/Behind-the-Scenes-Look-at-C-Sharp-Indexers/
Hallo,
wäre es nicht auch mit einer List<ObjektTyp> zu lösen?
dann hätte man sogar noch extra Sicherheit durch die starke Typisierung..
menti
There are 10 types of people - those who understand binary and those who don't.
Hallo Menticor,
ob List<T> oder wie von mir oben vorgeschlagen Array, beides ist hinsichtlich der starken Typisierung gleich gut. Bei einer List, kann sich die Größe der Collection ändern, bei einem Array nicht. Es hängt vom Anwendungsfall ab, was da besser ist. Beide Varianten haben den Nachteil, dass das Objekt selbst nichts davon mitbekommt, wenn in der Liste Elemente hinzugefügt oder entfernt oder ausgetauscht werden. Es gibt natürlich auch ObservableCollection, mit der man dieses Problem beheben kann.
herbivore
Hallo Menticor,
wäre es nicht auch mit einer List<ObjektTyp> zu lösen?
dann hätte man sogar noch extra Sicherheit durch die starke Typisierung
Ja - es geibt keine Anwendungsfälle (mehr), in denen man eine ArrayList braucht. List<T> sollte daher aus dem von dir genannten Grund immer verwendet werden
Allerdings ging es in diesem Thread, so wie ich das verstanden habe, eher um die Frage nach benannten, indizierten Properties.