Visual Basic'de enumerasyonlar (Enum), isimlendirilmiş tam sayı sabitlerini tanımlamak için kullanılır, bu da kodun okunabilirliğini ve bakımını artırır. Enumerasyonlar aşağıdaki gibi tanımlanır:
Public Enum StatusCode Success = 0 Warning = 1 Error = 2 End Enum
Önemli nüanslar:
Kullanım örneği:
Dim code As StatusCode = StatusCode.Success If code = StatusCode.Error Then Console.WriteLine("Hata!") End If ' Var olmayan bir değeri atama code = CType(5, StatusCode) ' Bu derlenir ama değer Enum'da tanımlanmaz
Enum türündeki bir değişkene Enum'da bulunan bir değer dışında bir değer atamak mümkün müdür? Bu ne ile sonuçlanabilir?
Evet, Visual Basic'de (ve genel olarak .NET'te) Enum türündeki bir değişkene uygun (temel tipine göre) herhangi bir sayısal değer açık dönüşümle (
CType,DirectCast) atanabilir. Bu derleme hatası yaratmaz, ancak sonraki kullanımlarda potansiyel sorunlara yol açar çünkü bu tür değerler Enum elemanlarının adlarına yansımaz ve ToString gibi yöntemlerle doğru şekilde çözümlenemez. Örneğin:
Dim code As StatusCode = CType(42, StatusCode) Console.WriteLine(code) ' '42' yazdırır, Enum elemanının adını değil
Hikaye
Bir büyük projede geliştiriciler WebAPI üzerinden durumları int olarak iletirken, istemci tarafında bunları Enum'a çeviriyorlardı. Yeni değerler eklendiğinde, ancak Enum'a eklenmediğinde, uygulama doğru bilgiyi gösteremedi çünkü Enum değerinin "geçerliliği" kontrolleri yoktu.
Hikaye
Option Strict olmadan Enum kullanılması, dış kaynaklardan gelen rastgele sayısal değerlerin Enum'a açıkça dönüştürülmesine neden olarak, runtime'da takip edilmesi zor hatalara yol açıyordu.
Hikaye
Enum'un temel tipi açıkça belirtilmediğinde (örneğin, bellek tasarrufu için Byte) bu, Compact Framework üzerindeki dar mikrodenetleyici çözümünde tam sayı taşmasına neden oldu.