Entwickler-Ecke
Basistechnologien - List<T>.Item überschreiben
wulfskin - Sa 26.07.08 12:15
Titel: List<T>.Item überschreiben
Hallo,
ich habe eine Liste abgeleitet und würde jetzt gerne die Eigenschaft
Item überschreiben, so dass ich meinen gewünschtes Objekt (vom gewünschten Typ) beim Zugriff auf den []-Operator bekomme.
Wie geht das?
Beispiel:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| public abstract class MeineListe: List<MeinTyp> {
}
public abstract class MeineAbgeleiteteListe: MeineList { } |
Viele Grüße und herzlichen Dank,
Hans-Peter
Moderiert von
Christian S.: Code- durch C#-Tags ersetztModeriert von
Christian S.: Topic aus C# - Die Sprache verschoben am Sa 26.07.2008 um 12:29
Christian S. - Sa 26.07.08 12:34
Hallo!
Wäre es nicht eleganter, eine Klasse für beide Typen zu verwenden? Das ist ja gerade Sinn von Generics ;-)
Könntest Du z.B. so machen (ich kenne die C#-Syntax gerade nicht, musst Du leider nachschlagen)
Oxygene
1: 2: 3: 4: 5:
| type MeineListe<T> = public class(List<T>) where T is MeinTyp; public end; |
Oder ist die Ableitung noch für mehr da, als dass die Items vom richtigen Typ sind? :-)
Grüße
Christian
wulfskin - Sa 26.07.08 12:39
Hallo,
ich mach mich nebenher mal schlau was Generics sind. Mir fehlt viel Theorie rund um die neuen Möglichkeiten im Vergleich zu Delphi (ohne .NET).
Aber es gibt mehrere abgeleitete Listen, die auch andere Dinge machen sollen. Deswegen wäre es nett, wenn du mir trotzdem jemand sagt wie das geht. Ob das dann die richtige Lösung ist, kann ich erst sagen wenn ich Generics verstanden habe.
Viele Grüße und herzlichen Dank,
Hans-Peter
wulfskin - Sa 26.07.08 14:10
Hallo,
hab es jetzt herausgefunden. Das Stichwort dafür heißt
Indexer. Sie verhalten sich im Prinzip gleich wie Eigenschaften.
So geht es:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| public abstract class MeineAbgeleiteteListe: MeineList { public new MeinAbgeleiteterTyp this[int index] { get { if (base[index] != null) return (MeinAbgeleiteterTyp)base[index];
else return null; }
} } |
Grüße,
Hans-Peter
Kha - Sa 26.07.08 17:03
Christians Tipp mit den Type Constraints (C#-Syntax: where T : MeinTyp) solltest du dir trotzdem noch einmal anschauen. Bei deinem Code müsstest du ja nicht nur den Indexer verdecken, sondern auch alle anderen Methoden. Und mit einem Cast auf die Basisklasse ist die Typsicherheit wieder futsch.
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!