ProgramlamaVB.NET Geliştirici, İş Uygulamaları Geliştiricisi

Tam açma/kapama bloklarıyla (Get/Set) ve otomatik olarak uygulanan özellikler (Auto-Implemented Properties) arasındaki farkı açıklayın ve Set içinde Value kullanımına dair gizli nüansları anlatın.

Hintsage yapay zeka asistanı ile mülakatları geçin

Cevap.

Visual Basic'te özellik (Property) iki şekilde tanımlanabilir:

  • Tam özellik (kendi Get/Set bloklarıyla): verilere erişimi kontrol etme, değer okuma/yazma sırasında ek kontroller veya işlemler yapma imkanı sunar.
  • Otomatik özellik (auto-implemented): Get/Set açıkça yazılmaz, özel bir alan otomatik olarak oluşturulur:
' 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.
  • Otomatik uygulamada anonim alanı değiştirmek kontrol edilemez.

Ne zaman kullanılmalı:

  • Otomatik özellikler — en basit "kapsayıcı" gerektiğinde.
  • Tam özellikler — değer atama/alımında mantık (doğrulama, bildirim, hesaplamalar) gerektiğinde.

Kandırma sorusu.

Set(ByVal value As Integer) yazım hatasının Set(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

Büyük bir projede VB6'dan VB.NET'e otomatik kod geçişi sırasında Set içinde ByVal eklendi — derleyici, belirli bir nedeni göstermediği için uzun süre izlenemeyen gizemli hatalar verdi.

Hikaye

Büyük veri setlerinin işlendiği bir projede, verileri saklamak için otomatik özellikler kullanıldı, ardından bir sorun çıktı: özelliğin değişip değişmediğini otomatik olarak günlüğe kaydetmek gerekiyordu. Otomatik özelliklerin tam olanlarla değiştirilmesi gerekti — bunun için çok zaman kaybedildi çünkü başlangıçta Set içinde ek bir mantık gerekeceği dikkate alınmamıştı.

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.