"Was ist das denn?", er zeigte auf eine private Property.
Ein weiterer Bürobewohner eilte herbei um sich das Kunstwerk anzuschauen.
Nicht genug, dass sie private Properties nicht kannten, zogen sie anschliessend auch noch gemeinsam darüber her.
Das sei schlechter Stil, Properties seien Schnittstellenelemente und nicht für interne Zwecke, usw.
Ich bin da anderer Meinung - und verwende Properties auch gerne mal privat, internal oder protected. Nützlich ist das z.B. bei interner Lazy initialization:
Public Class frmEditor
Private m_CardSets As List(Of DataModel.CardSet)
Private Property CurrentCardSets() As List(Of DataModel.CardSet)
Get
If (Me.m_CardSets Is Nothing) Then
Me.m_CardSets = New List(Of DataModel.CardSet)
End If
Return Me.m_CardSets
End Get
End Property
End Class
Ist doch ganz nett oder? Lazy initialization krieg ich sonst nicht so schön - auch nicht mit einer Methode wie z.B. GetCurrentCardSets() wie ein Kollege vorschlug. Die Syntax ist wesentlicher unschöner: GetCurrentCardSets().Add(...) muss sich echt nicht mit CurrentCardSets.Add(...) messen wollen.
Wie verhindert man jetzt aber, dass der Programmierer diese lazy initialization nicht einfach umgeht und auf das backing field zugreift? Eine schöne Lösung dafür ist in VB.NET das Schlüsselwort static:
Public Class MyLazyPrivate
Private Property Cards() As List(Of Card)
Get
Static lazyList As List(Of Card)
If (lazyList Is Nothing) Then
lazyList = New List(Of Card)
End If
Return lazyList
End Get
End Property
End Class
Perfekt, so mag ichs, jetzt ist das Backingfield auch noch schön lokal. Ich verstehe sowieso nicht wieso Microsoft nicht schon lange eine Möglichkeit eingeführt hat das Backingfield auf den Scope der Property zu begrenzen. Wäre doch wesentlich sauberer, oder? Ok, zugegeben mit den automated Properties in VS08 macht Microsoft das ja ein wenig...
Achja, zum Titel:
Ausser, das Propertys eigenlich als Schnittstelle für die Auswelt gedacht
war.Das ist wie wenn ich an mein Briefkasten den Schlitz zuschweise.Ich kann
zwar jetzt Briefe dort sicher aufbewaren, das ist aber nicht im sinne des
Erfinders.....
ActiveVB Thread zum Thema.
Keine Kommentare:
Kommentar veröffentlichen