Moin,
es ist ja durchaus möglich, durch explizite und implizite Überladung eines Typs zu erreichen, eine explizite und implizite Konvertierung zu erreichen:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| class GefäßKlasse<T> { public T objekt; public static implicit operator T(GefäßKlasse<T> obj) { return obj.objekt; } } |
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| class Program { static void Main() { GefäßKlasse<int> obj = new GefäßKlasse<int>() { objekt = 5 }; int zahl = obj; } } |
Ich möchte das auch anders herum erreichen, dass ich das Objekt einer Klasse wie einen Wert mit einem primitiven Datentyp aufrufen kann und der übergebene neue Wert, wird intern im Objekt dann automatisch einer vor definierten Eigenschaft zu gewiesen. Gleichzeitig soll aber auf weitere Eigenschaften zugegriffen werden können.
C#-Quelltext
1: 2: 3: 4: 5: 6:
| class GefäßKlasse<T> { public T objekt; public int IrgendeineZahl; } |
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| class Program { static void Main() { GefäßKlasse<int> obj = new GefäßKlasse<int>() { objekt = 5 }; obj = 10; Console.WriteLine(obj); obj.IrgendeineZahl = 20; Console.WriteLine(obj.IrgendeineZahl); } } |
Das ganze möchte ich aber nicht nur für primitive Datentypen verwenden, sondern für jeden, den es gibt.
Damit erreiche ich, dass ich einem Attribut einer Klasse spezifische Eigenschaften zuweisen kann, ohne dabei den Aufruf dieses Attributes zu ändern, also dass man es genauso verwenden, als wäre es unverändert. Wenn ich nun aber auf diese spezifischen Informationen zugreifen möchte, rufe ich direkt eine der Eigenschaften ab und arbeite damit.
Oder man kann über ein Event von außen fest legen, wie eine Eigenschaft reagiert, ohne dass ich dafür reihenweise Events für jedes Attribut anlegen muss, ich könnte dann einfach das entsprechende Event in dem Attribut suchen:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| class GefäßKlasse<T> { public delegate void ObjektÄndertSichEventHandler(T sender);
private T _Obj; public T Obj { get { return this._Obj; } set { ObjektÄndertSichEvent(value); this._Obj = value; } } public event ObjektÄndertSichEventHandler ObjektÄndertSichEvent;
} |
C#-Quelltext
1: 2: 3: 4: 5:
| class KlasseMitVielenAttributen { public GefäßKlasse<string> name; } |
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| class Program { static void Main() { var obj = new KlasseMitVielenAttributen(); obj.name = "Heinz"; obj.name.ObjektÄndertSichEvent += NameÄndertSich; }
public static void NameÄndertSich(string sender) { Console.WriteLine("Neuer Name: " + sender); } } |
An sich wäre das ja machbar, indem ich eine Klasse schreibe, die von dem jeweils benötigten Typ erbt, aber dann ist das nur für diesen Typ von Bedeutung, ich möchte das aber generisch haben.
An sich möchte ich also in einer Klasse fest legen können, welche Eigenschaft dieser Klasse verwendet wird, wenn keine Eigenschaft direkt angesprochen wird. Normalerweise würe das einen Fehler geben, aber kann man das auch gewollt steuern?
Gibt es da eine Möglichkeit, das irgendwie einzurichten, oder ist dafür vielleicht sogar schon etwas vor gesehen?
Grüße