Ich weiß nicht, was die ReadOnly
gibt Ihnen in VB. Ich denke, die deutlichste man bekommen kann tatsächlich weniger ausführlich ist:
public int Id { get; private set; }
In C# readonly
zeigt an, dass der Wert eines Feldes bei der Erstellung des Objekts festgelegt und ist unveränderlich nach den Konstruktor beendet.
private readonly int _id; // note field marked as 'readonly'
public int Id
{
get { return _id; }
}
Leider automatische Eigenschaften (wie zeige ich in dem ersten Code-Schnipsel) werden nicht als readonly
erlaubt: Man könnte über erreichen, dass. Das bedeutet, dass Sie die schreibgeschützte Semantik selbst erzwingen müssen, indem Sie sicherstellen, dass keiner der Klassencodes den privaten Setter aufruft, nachdem der Konstruktor beendet wurde. Ich denke, das ist anders als das, auf das Sie sich beziehen, wenn VB ReadOnly
verwendet.
BEARBEITEN Wie Thomas hervorhebt, unterscheidet sich Getter nicht von einem privaten. Allerdings ist VB's usage of ReadOnly
anders als die C# ein, zumindest, wenn sie mit Eigenschaften verwendet:
' Only code inside class employee can change the value of hireDateValue.
Private hireDateValue As Date
' Any code that can access class employee can read property dateHired.
Public ReadOnly Property dateHired() As Date
Get
Return hireDateValue
End Get
End Property
Zu einem C# -Programmierer, das ReadOnly
Schlüsselwort überflüssig erscheinen würde. Dies wird bereits durch die Tatsache impliziert, dass kein Setter existiert.
Soweit Felder betroffen sind, scheinen C# und VB gleichwertig.
Um ausführlicher zu sein ?! Das ist, was vb ist für ... – Tahbaza
Wenn Sie sagen "mehr wortreich", was meinen Sie? Mit Ihrem Codebeispiel erhalten Sie den gleichen Compilerfehler wie in VB.NET, wenn Sie versucht haben, ihm zuzuordnen. Intellisense sollte es auch als einen nur abrufbaren Gegenstand identifizieren. –
@ Jonathan: Ausführlicher darin, dass es für den Leser klarer ist als durch Schlussfolgerung, dass es eine readonly Eigenschaft ist. –