Entwickler-Ecke

C# - Die Sprache - Delegat von Getter- und Setter-Methoden


relapse - Mo 12.12.11 15:14
Titel: Delegat von Getter- und Setter-Methoden
Hallo, neue Frage von mir: Wie kann man Delegaten für getter und setter Mehoden erzeugen, die mit Objekten operieren?

Beispiel:


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
private Objektklasse _objekt;

public Objektklasse Objekt
{
    get { return _objekt; }
    set { _objekt = value; }
}


Moderiert von user profile iconChristian S.: C#-Tags hinzugefügt


Ralf Jansen - Mo 12.12.11 15:52


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
event EventHandler<Objektklasse> meinLieberEvent;

public event EventHandler<Objektklasse> MeinLieberEvent
{
    add
    {
        meinLieberEvent += value;
    }
    remove
    {
        meinLieberEvent -= value;
    }
}


Oder du erklärst noch mal deutlich was du genau meinst.


Th69 - Mo 12.12.11 16:00

Hallo relapse,

direkt gibt es in C# keine Delegates für Eigenschaften (properties), s.a. http://www.csharp411.com/property-delegates-with-anonymous-methods/
Jedoch kannst du etwas ähnliches per Reflection, anonymen Methoden oder der CreateDelegate-Methode erreichen:
http://stackoverflow.com/questions/289980/is-there-a-delegate-available-for-properties-in-c
http://stackoverflow.com/questions/724143/how-do-i-create-a-delegate-for-a-net-property
http://stackoverflow.com/questions/2796912/c-sharp-property-delegate


relapse - Mo 12.12.11 16:42

Danke! Wieder sehr hilfreiche Antwort!

Ich habe folgenden Link genommen, daraus die akzeptierte Antwort (mit dem Häckchen)

http://stackoverflow.com/questions/289980/is-there-a-delegate-available-for-properties-in-c

und folgendes damit gemacht:




C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
public class Beispielklasse (Model model)
{
    Action<Objektklasse> _valueSetter;

    private Objektklasse _objekt;   // member

    public Objektklasse Objekt      // getter-setter
    {
        get { return _objekt; }
        set { _objekt = value; }
    }

    public Beispielklasse           // Konstruktor
    {
        _valueSetter = (v => Objekt = v);
        model.ObjektSpeichern(_objekt, maskeSchliessen, _valueSetter);
    }
}



... und das läuft!

Moderiert von user profile iconChristian S.: C#-Tags hinzugefügt