Die Antwort von Jürgen ist zwar sehr schön und ausführlich, irgendwie werde ich aber das Gefühl nicht los, das Du etwas wesentlich trivialeres meinst: Ein öffentliches Array/Liste als Property welche als Defaultproperty hinterlegt ist.
public MyClass() { //Liste Initalisieren _liste = new List<string>(); for (int i = 0; i < 41; i++) { _liste.Add("Nummer " + i.ToString()); } }
private List<String> _liste; public String this[int index] { get { return _liste[index]; } set { _liste[index] = value; } }
Lässt sich dann wie folgt benutzen:
MyClass myclass = new MyClass(); var q = myclass[34];
q ist vom Typ String und beinhaltet den Wert "Nummer 34". Durch das "this" in "public String this[int index]" hast Du festgelegt, das diese Property als Default für diese Klasse angenommen wird. Deshalb kannst Du dann mit myclass[34] darauf zugreifen.
Schau dir mal an, ob dieser Code dich weiterbringt:
public class MyClass { private readonly string _name;
public MyClass(string name) { _name = name; MyClassList.Add(this); }
static readonly List<MyClass> MyClassList = new List<MyClass>();
public static void Show() { foreach (var myClass in MyClassList) { Console.WriteLine(myClass._name); }
}
public static MyClass Get(int index) { return MyClassList[index]; } }
Der Aufruf könnte wie folgt aussehen:
MyClass myClass1 = new MyClass("Klasse1"); MyClass myClass2 = new MyClass("Klasse2"); MyClass myClass3 = new MyClass("Klasse3"); MyClass.Show(); MyClass myClassGet2 = MyClass.Get(1);
Hinweis: Über das Dispose-Pattern solltest du Objekte aus der Liste wieder entfernen.
Jetzt habe ich den Code noch etwas erweitert. Mit der Zeile: MyClass myClassGet2 = MyClass.Get(1); kannst du wie mit einem Index auf deine Liste von Klassenobjekten zugreifen. Natürlich müssten noch Exception-Handling etc. eingebaut werden.
mit dem header der frage nicht, mit der frage schon - wenn die property eine fixe auswahl ist, würde ich meinen eine enumeration reicht völlig. die "komplizierteren" konstrukte braucht es ja nur wenn dynamische auswahl-werte dargestellt werden müssen