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ıyı kullanırken yalnızca üyelerin değerlerini okuyabilir veya yöntemleri çağırarak bir deyimde kullanılan yapının üyelerine değer atamaya çalışsanız hata With...End With alırsınız.

Syntax

With objectExpression
    [ statements ]
End With

Bölümler

Süre Tanım
objectExpression Gereklidir. 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ı. ve arasında, değerlendirmesiyle üretilen bir nesnenin üyelerine With End With başvuran bir veya daha fazla objectExpression deyim.
End With Gereklidir. Bloğun tanımını With sonlandırılır.

Açıklamalar

kullanarak, belirtilen bir nesne üzerinde, nesnenin adını birden çok kez With...End With belirtmeden bir dizi deyim gerçekleştirebilirsiniz. Deyim bloğu içinde, bir nokta ile başlayan nesnenin bir üyesini deyimi nesnesinden önce geldi gibi With With belirtebilirsiniz.

Örneğin, tek bir nesnede birden çok özelliği değiştirmek için, her özellik ataması için bir kez yerine yalnızca bir kez nesnesine başvuran özellik atama deyimlerini With...End With bloğun içine girin.

Kodunuz birden çok deyimde aynı nesneye erişıyorsa deyimini kullanarak aşağıdaki avantajları elde With 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.

veri türü herhangi objectExpression bir sınıf veya yapı türü, hatta gibi Visual Basic basit bir tür Integer olabilir. Bir nesne dışında bir sonuç elde ederse, yalnızca üyelerinin değerlerini okuyabilir veya yöntemleri çağırabilirsiniz ve deyiminde kullanılan bir yapının üyelerine değer atamayı denersanız bir hata objectExpression With...End With alırsınız. Bu, bir yapıyı döndürülen ve hemen erişilen ve gibi işlevin sonucu üyesine bir değer ataan bir yöntem çağırdıysanız elde edilen hatayla GetAPoint().x = 1 aynıdır. İ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 girdiktan sonra bir kez değerlendirilir. bloğundan yeniden objectExpression With ayazlayazmaz.

Bir With blok içinde, yalnızca belirtilen nesnenin yöntemlerine ve özelliklerine uygun olmadan 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çinde yer alan bir ifadedir. Başvurulan nesneler bağlamdan net olmayan iç With...End With içe geçmiş deyimler kafa karıştırıcı olabilir. Nesneye bir iç bloğun içinden başvurul olduğunda dış bloktaki bir With nesneye tam başvuru With sağlamış oluruz.

Bloğun dışından bir deyim With bloğuna dallara alınamaz.

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ü nesne With başlatıcılarda da kullanabilirsiniz. Daha fazla bilgi ve örnekler için bkz. Nesne Başlatıcıları: Adlandırılmış ve Anonim Türler ve Anonim Türler.

Bir bloğu yalnızca az önce örneklemiş bir nesnenin özelliklerini veya alanlarını başlatmak için kullanıyorsanız, bunun yerine bir nesne başlatıcı With kullanmayı göz önünde bulundurabilirsiniz.

Örnek 1

Aşağıdaki örnekte, her With blok tek bir nesnede 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 geçmiştir. İç içe geçmiş 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

Ayrıca bkz.