2009-06-06 7 views
2

Bevor C# 3.0 wir so getan anpassen:Wie Auto Eigenschaften in C# 3.0

class SampleClass 
{ 
    private int field; 
    public int Property { get { return this.field } set { this.field = value } } 
} 

Jetzt tun wir dies:

class SampleClass 
{ 
    public int Property { get; set; } 
} 

(! Schau ma keine Felder) Nun, wenn ich Möchten Sie den Getter oder Setter anpassen, muss das Feld explizit wie in C# 2.0 sein?

+0

Nebenbei - Seien Sie sehr vorsichtig, wenn Sie BinaryFormatter verwenden und Auto-Requisiten ändern; Es ist nicht robust: http://marcgravell.blogspot.com/2009/03/obfuscation-serialization-and.html –

Antwort

7

Ja, das ist der einzige Weg. Keine Verknüpfung für die Anpassung (außer Zugriffsmodifizierer).

1

Ja, der Zweck der automatischen Eigenschaften ist ein Mittel, um Anpassungen in der Zukunft hinzuzufügen, ohne die bestehenden Benutzer der Klasse zu beeinflussen. Dies bedeutet normalerweise, dass ein privates/geschütztes Hintergrundfeld hinzugefügt wird.

+0

Im Allgemeinen sollten alle Felder für eine gute Kapselung privat sein. Wenn Sie möchten, dass Untertypen auf das Feld zugreifen, sollten Sie einen öffentlichen Getter und geschützten Setter (oder Varianten davon) haben – thecoop

2

Mit C# 3.0 und automatischen Eigenschaften, können Sie immer noch die Ebene Zugang ändern:

class SampleClass 
{ 
    public int Property { get; private set; } 
} 
0

Sie auch nicht nur lesbar Felder mit automatischen Eigenschaften angeben können, noch können Sie Variableninitialisierungen verwenden (obwohl ich einige gesehen habe vorgeschlagen, Spracherweiterungen, die diese erlauben würden).

Sie können automatische Eigenschaften virtuell machen, dies bedeutet jedoch, dass jeder Zugriff auf die Eigenschaft in der Klasse stattdessen Subtypimplementierungen aufrufen kann.

Verwandte Themen