Nie wiem, co daje ReadOnly
w VB. Chyba najbardziej wyraźne można dostać jest rzeczywiście mniej gadatliwy:
public int Id { get; private set; }
W języku C#, readonly
wskazuje, że wartość polu jest ustawione podczas tworzenia obiektu i jest niezmienny po wyprowadzeniu konstruktora. Można to osiągnąć poprzez:
private readonly int _id; // note field marked as 'readonly'
public int Id
{
get { return _id; }
}
Niestety automatycznych właściwości (jak pokażę w pierwszym fragmencie kodu) nie mogą być readonly
. Oznacza to, że musisz samodzielnie wymusić semantykę tylko do odczytu, upewniając się, że żaden kod twojej klasy nie wywołuje ustawienia prywatnego po zakończeniu konstruktora. Wydaje mi się, że różni się to od tego, co masz na myśli, używając VB w wersji ReadOnly
.
EDYTOWANIE Jak wskazuje Thomas, posiadanie go nie różni się od posiadania prywatnego. Jednak VB's usage of ReadOnly
różni się od C# jeden, przynajmniej w przypadku korzystania z właściwości:
' 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
Aby programista C#, słowo kluczowe ReadOnly
wydaje się zbędny. Wynika to już z faktu, że nie istnieje żaden ustawodawca.
Jeśli chodzi o pola, C# i VB wydają się równoważne.
Aby być bardziej gadatliwym ?! To właśnie vb jest dla ... – Tahbaza
Kiedy mówisz "bardziej gadatliwy", o czym mówisz? Za pomocą przykładu kodu otrzymasz taki sam błąd kompilatora, jak w VB.NET, jeśli próbowałbyś go przypisać. Intellisense powinien także zidentyfikować go jako element do pobrania. –
@ Jonathan: Bardziej szczegółowe, ponieważ czytelnik jest bardziej przejrzysty niż wnioskowanie, że jest to własność tylko do odczytu. –