Visual Basic'te özellik (Property) iki şekilde tanımlanabilir:
' Otomatik özellik Public Property Name As String ' Tam özellik 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("Yaş negatif olamaz") _age = value End Set End Property
Set kullanırken dikkat edilmesi gerekenler:
Value anahtar kelimesi, atanan değere atıfta bulunan bir takma değişkendir.Set içinde validasyon, günlüğe kaydetme, olay başlatma gibi işlemler yapılabilir.Ne zaman kullanılmalı:
Set(ByVal value As Integer)yazım hatasınınSet(value As Integer)yerine VB.NET' te ne gibi sonuçları olur? Neden böyle yazmak yanlıştır?
Cevap:
VB.NET sözdizimi, Set içinde kesinlikle (ve desteklenmiyor) ByVal parametresini açıkça tanımlamayı gerektirmez — sadece Set(value As Type) kullanın. Set(ByVal value As Integer) yazarsanız, bu derleme hatasına yol açar.
Hatalı kod örneği:
'Set(ByVal value As Integer) — derleme hatası Public Property Prop As Integer Set(ByVal value As Integer) ... End Set End Property
Klasik VB6'da böyle bir sözdizimi geçerliydi, ancak VB.NET'te kesinlikle Set(value As Type) gerektirir.
Hikaye
ByVal eklendi — derleyici, belirli bir nedeni göstermediği için uzun süre izlenemeyen gizemli hatalar verdi.Hikaye
Hikaye
Referans tipi nesnelerin otomatik özellikler aracılığıyla kopyalanması sırasında, Get/Set üzerinden derin kopyalama gerçekleştirmeyi unuttuk. Sonuç olarak, aynı nesneye referans içeren kopyalar alıyorduk; bir örnekteki değişim, diğerini de değiştiriyordu.