In Visual Basic, una proprietà (Property) può essere dichiarata in due modi:
' Proprietà automatica Public Property Name As String ' Proprietà completa Private _age As Integer Public Property Age As Integer Get Return _age End Get Set(value As Integer) If value < 0 Then Throw New ArgumentException("L'età non può essere negativa") _age = value End Set End Property
Dettagli sull'uso di Set:
Value è una pseudo-variabile che si riferisce al valore assegnato.Set è possibile eseguire validazione, registrazione, attivazione di eventi.Quando utilizzare:
Quali sono i rischi legati all'errore di scrivere
Set(ByVal value As Integer)invece diSet(value As Integer)in VB.NET? Perché non dovresti scriverlo in questo modo?
Risposta:
La sintassi VB.NET non richiede (e non supporta) la dichiarazione esplicita del parametro ByVal in Set — utilizzare semplicemente Set(value As Type). Se scrivi Set(ByVal value As Integer), questo porterà a un errore di compilazione.
Esempio di codice errato:
'Set(ByVal value As Integer) — errore di compilazione Public Property Prop As Integer Set(ByVal value As Integer) ... End Set End Property
In VB6 classico questa sintassi era consentita, ma in VB.NET è strettamente richiesto Set(value As Type).
Storia
ByVal in Set — il compilatore ha restituito errori misteriosi che non potevano essere localizzati a lungo, poiché il linter non mostrava la causa chiara.Storia
Storia
Quando abbiamo copiato oggetti di tipo reference tramite proprietà automatiche, abbiamo dimenticato di implementare il deep copy tramite Get/Set. Di conseguenza, abbiamo ottenuto duplicazioni di riferimenti allo stesso oggetto; la modifica di un'istanza portava alla modifica di un'altra.