With...End With operatörü, aynı nesnenin özelliklerine ve yöntemlerine erişimi kolaylaştırır, böylece her ifadede nesne adını tekrarlamaya gerek kalmaz. Blok içindeki tüm başvurular belirtilen nesneye atıfta bulunur.
Kullanım örneği:
With myCustomer .Name = "İvanov" .Balance += 1000 .LastPurchase = Now End With
Faydası:
Soru: Bir With bloğunu diğerinin içine koymak mümkün mü? İç içe blokta özelliklere ve yöntemlere yapılan başvurular ne olur?
Cevap: Evet, iç içe yerleştirmek mümkündür. Ancak iç blokta nokta (.) ile yapılan başvurular, iç nesneye göre değerlendirilir. Eğer aynı isimde bir özellik kullanılırsa, belirsizlik oluşur.
With obj1 .Value = 10 With obj2 .Value = 20 ' Bu obj2.Value, obj1.Value değil. End With End With
Hikaye
İç içe geçmiş With bölümünde farklı nesnelerde aynı isimde özellikler kullanıldı ve geliştirici, atamanın dış nesne üzerinde etki edeceğini düşündü. Sonuç olarak veriler yanlış yere yazıldı, sorun karmaşık bir rapor oluşturulurken belirdi ve değerler karıştı.
Hikaye
Kodun daha temizlenmesi sırasında End With bloklarının sonu karıştırıldı. Büyük bir kod parçasında, ifadeler beklenenin aksine farklı (ve zaten kapatılan) nesne örneğine atıfta bulunmaya başladı, bu da çalıştırma hatalarına ve zor tespit edilen hatalara yol açtı.
Hikaye
İş mantığında, iç içe koleksiyonlar için With kullanıldı. Sınıf yapısı güncellendikten sonra, iç nesnenin özelliği ile aynı isme sahip yeni bir özellik eklendi, bu da bir çelişkiye ve derleme hatasına neden oldu, bu durumda birim testlerinin olmaması nedeniyle fark edilmedi.