2009-03-20 4 views
1

In C# kann ich dies tun:Kann ich eine automatische Eigenschaft (kein privates Mitglied) mit get und set code erstellen?

public int Foo { get; set; } 

das ist schön. Aber sobald ich etwas in dem Getter oder Setter tun will, muss ich es so weit ändern:

private int foo; 
public int Foo { 
    get { return foo; } 
    set { 
     foo = value; 
     DoSomething(); // all that other code, just to add this line! 
    } 
} 

Ist es möglich, dies zu vermeiden? Ich würde gerne in der Lage sein, so etwas zu tun:

public int Foo { 
    get; 
    set {   
     DoSomething(); 
    } 
} 

Wie nah kann ich auf die oben bekommen?

Antwort

6

Nein, es gibt keine Möglichkeit, dies mit Eigenschaften in einer vorhandenen Version von C# oder C# 4.0 zu tun.

0

Mit automatischen Eigenschaften generiert der Compiler ein Hintergrundfeld für Sie. Für einen benutzerdefinierten Getter/Setter müssen Sie manuell ein Hintergrundfeld erstellen, mit dem Sie arbeiten können. Die Möglichkeit, einen benutzerdefinierten Getter/Setter für eine automatische Eigenschaft anzugeben, würde es im Wesentlichen wie eine Methode wirken lassen, da es nichts zu holen oder zu setzen gibt.

0

Die kurze Antwort? Nein. Die lange Antwort? Sorry, immer noch nicht. :) Ich fühle deinen Schmerz Mann, aber so ist es.

2

Wie andere gesagt haben, gibt es keine eingebaute Möglichkeit, dies zu tun.

Sie könnten etwas Ähnliches mit PostSharp erreichen. Aber ich bin mir nicht sicher, ob es sich lohnt.

[AfterSet(DoSomething)] 
public int Foo { 
    get; 
    set; 
} 
+0

Interessant, aber ich denke, Sie haben Recht - es ist die Mühe nicht wert: P – Blorgbeard

+0

können Sie ein Beispiel geben? Es ist sehr interessant für mich :)! –

Verwandte Themen