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. Yapı kullanırken, yalnızca üyelerin değerlerini okuyabilir veya yöntemleri çağırabilirsiniz ve deyimde kullanılan bir yapının üyelerine değer atamaya çalışırsanız hata With...End With
alırsınız.
Sözdizimi
With objectExpression
[ statements ]
End With
Parça
Süre | 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 |
isteğe bağlı. ve arasında With End With , değerlendirmesiyle objectExpression oluşturulan bir nesnenin üyelerine başvuruda bulunan bir veya daha fazla deyim. |
End With |
Gerekli. Bloğun tanımını sonlandırır With . |
Açıklamalar
kullanarak With...End With
, belirtilen nesnenin adını birden çok kez belirtmeden bir dizi deyim gerçekleştirebilirsiniz. Bir With
deyim bloğunda, deyimi nesnesinden önce gelen gibi nokta ile başlayan nesnenin With
bir üyesini belirtebilirsiniz.
Örneğin, tek bir nesnedeki birden çok özelliği değiştirmek için özellik atama deyimlerini bloğun With...End With
içine yerleştirin ve nesneye her özellik ataması için bir kez değil yalnızca bir kez başvuruda bulunun.
Kodunuz birden çok deyimde aynı nesneye erişiyorsa, deyimini With
kullanarak aşağıdaki avantajları elde edebilirsiniz:
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.
veri türü objectExpression
herhangi bir sınıf veya yapı türü, hatta gibi Integer
bir Visual Basic temel öğesi türü olabilir. Bir nesne dışında bir sonuçla objectExpression
sonuçlanırsa, yalnızca üyelerinin değerlerini okuyabilir veya yöntemleri çağırabilirsiniz ve deyimde kullanılan bir yapının üyelerine değer atamaya çalışırsanız hata With...End With
alırsınız. Bu hata, bir yapı döndüren ve işlevin sonucunun bir üyesine hemen erişen ve bir değer atamış olan bir yöntemi çağırırsanız, elde edeceğiniz hatanın aynısı olur. Örneğin GetAPoint().x = 1
. İ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ğuna girdikten sonra bir kez değerlendirilir. öğesini bloğun içinden With
yeniden atayamazsınızobjectExpression
.
Bir With
blok içinde, yalnızca belirtilen nesnenin yöntemlerine ve özelliklerine nitelemeden erişebilirsiniz. Diğer nesnelerin yöntemlerini ve özelliklerini kullanabilirsiniz, ancak bunları nesne adlarıyla nitelemeniz gerekir.
Bir deyimi başka bir With...End With
deyimin içine yerleştirebilirsiniz. Başvurulmakta olan nesnelerin bağlamı açık değilse iç içe With...End With
deyimler kafa karıştırıcı olabilir. Nesneye bir iç With
bloğun içinden başvurulduğunda, dış With
bloktaki bir nesneye tam başvuru sağlamanız gerekir.
Bloğun dışından bir With
deyim bloğuna dallayamazsı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 Denetim Yapıları.
Not
Anahtar sözcüğünü With
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 ve Anonim Türler.
Yalnızca örneği oluşturduğunuz bir With
nesnenin özelliklerini veya alanlarını başlatmak için bir blok kullanıyorsanız, bunun yerine bir nesne başlatıcısı kullanmayı göz önünde bulundurun.
Örnek 1
Aşağıdaki örnekte, her With
blok tek bir nesne üzerinde bir dizi deyim yürütür.
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
Örnek 2
Aşağıdaki örnekte deyimler With…End With
iç içe yerleştirilmiştir. İç içe With
deyiminde söz dizimi iç nesneye başvurur.
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