With...End With Deyimi (Visual Basic)
Deyimlerin, nesne veya yapı üyelerine erişim sağlarken basitleştirilmiş bir sözdizimi kullanabilmesi için sürekli olarak tek bir nesneye veya yapıya başvuran bir dizi deyim yürütür. Bir yapı kullanırken yalnızca üyelerin veya çağırma yöntemlerinin değerlerini okuyabilirsiniz ve With...End With deyiminde kullanılan bir yapının üyelerine değer atamaya çalışırsanız hata alırsınız.
With objectExpression
[ statements ]
End With
Bölümler
Terim |
Tanım |
objectExpression |
Gerekli.Nesne olarak değerlendirilen bir ifade.İfade rasgele karmaşık olabilir ve yalnızca bir kez değerlendirilir.İfade, basit türler de dahil olmak üzere herhangi bir veri türü olarak değerlendirilebilir. |
statements |
İsteğe bağlı.With ile End With arasındaki bir veya daha fazla deyim olup, objectExpression öğesinin değerlendirilmesiyle oluşturulan bir nesnenin üyelerine başvuruda bulunabilir. |
End With |
Gerekli.With bloğunun tanımını sonlandırır. |
Notlar
With...End With kullanarak, belirtilen bir nesne üzerinde, nesnenin adını birçok kez belirtmeden bir dizi deyim gerçekleştirebilirsiniz.Bir With deyim bloğu dahilinde, nokta ile başlayan nesnenin bir üyesini önünde With deyim nesnesi varmış gibi belirtebilirsiniz.
Örneğin, tek bir nesnede birden fazla özelliği değiştirmek için, özellik atama deyimlerini With...End With bloğunun içine yerleştirin ve her özellik ataması için birer kez başvurmak yerine nesneye tek bir kez başvurun.
Kodunuz birden fazla deyimde aynı nesneye erişim sağlıyorsa, With deyimini kullanarak aşağıdaki avantajları elde edersiniz:
Karmaşık ifadenin üyelerine birden çok kez başvuruda bulunmak için sonucu geçici bir değişkene atamanıza veya karmaşık ifadeyi birden çok kez değerlendirmenize gerek yoktur.
Yinelenen niteleyici ifadeleri ortadan kaldırarak kodunuzu daha okunur hale getirirsiniz.
objectExpression veri türü, herhangi bir sınıf veya yapı türü olabilir ve hatta Integer gibi bir Visual Basic basit türü olabilir. objectExpression nesne dışında herhangi bir sonucu verirse, yalnızca üyelerinin veya çağırma yöntemlerinin değerlerini okuyabilirsiniz ve With...End With deyiminde kullanılan bir yapının üyelerine değer atamaya çalışırsanız hata alırsınız. Bu hata, yapı döndüren bir yöntemi çağırdığınız ve hemen erişim sağlayıp işlev sonucunun bir üyesine değer atadığınız (GetAPoint().x = 1 gibi) durumda alacağınız hatayla aynı olur. İki durumda da sorun şudur: Yapı yalnızca çağrı yığınında mevcuttur ve değiştirilmiş bir yapı üyesinin bu durumlarda, programdaki diğer herhangi bir kodun değişikliği gözlemleyebileceği şekilde bir konuma yazabilmesinin hiçbir yolu yoktur.
objectExpression, bloğa girildiğinde bir kez değerlendirilir.objectExpression öğesini With bloğunun içinden tekrar atayamazsınız.
Bir With bloğu içinde, yalnızca belirtilen nesnenin yöntemlerine ve özelliklerine (bunları nitelemeden) erişim sağlayabilirsiniz.Diğer nesnelerin yöntemlerini ve özelliklerini kullanabilirsiniz, ancak bunları nesne adlarıyla nitelemeniz gerekir.
Bir With...End With deyimini bir diğerinin içine yerleştirebilirsiniz.Başvuruda bulunulan nesneler bağlamdan açık bir şekilde anlaşılmıyorsa, iç içe With...End With deyimleri kafa karıştırıcı olabilir.Dış With bloğunda bulunan bir nesneye, bir iç With bloğundan başvuru olduğunda tam nitelikli bir başvuru sağlamalısınız.
Bir With deyim bloğuna, bloğun dışından dal oluşturamazsınız.
Blok bir döngü içermediği sürece deyimler yalnızca bir kez çalışır.Farklı türlerde denetim yapılarını iç içe yerleştirebilirsiniz.Daha fazla bilgi için bkz. İç İçe Geçmiş Denetim Yapıları (Visual Basic).
[!NOT]
With anahtar sözcüğünü nesne başlatıcılarda da kullanabilirsiniz.Daha fazla bilgi ve örnek için bkz. Nesne Başlatıcıları: Adlandırılmış ve Anonim Türler (Visual Basic) ve Anonim Türleri (Visual Basic).
With bloğunu kullanmanızın tek amacı, az önce örneğini oluşturduğunuz bir nesnenin özelliklerini veya alanlarını başlatmak ise, bunun yerine bir nesne başlatıcı kullanmayı düşünün.
Örnek
Aşağıdaki örnekte, her bir With bloğu tek bir nesne üzerinde bir dizi deyim yürütmektedir.
Private Sub AddCustomer()
Dim theCustomer As New Customer
With theCustomer
.Name = "Coho Vineyard"
.URL = "http://www.cohovineyard.com/"
.City = "Redmond"
End With
With theCustomer.Comments
.Add("First comment.")
.Add("Second comment.")
End With
End Sub
Public Class Customer
Public Property Name As String
Public Property City As String
Public Property URL As String
Public Property Comments As New List(Of String)
End Class
Aşağıdaki örnekte With…End With deyimleri iç içe kullanılmaktadır.İç içe kullanılan With deyimi dahilinde, sözdizimi içteki nesneye başvurmaktadır.
Dim theWindow As New EntryWindow
With theWindow
With .InfoLabel
.Content = "This is a message."
.Foreground = Brushes.DarkSeaGreen
.Background = Brushes.LightYellow
End With
.Title = "The Form Title"
.Show()
End With
Ayrıca bkz.
Başvuru
Kavramlar
İç İçe Geçmiş Denetim Yapıları (Visual Basic)
Nesne Başlatıcıları: Adlandırılmış ve Anonim Türler (Visual Basic)