Aracılığıyla paylaş


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 WithEnd With , değerlendirmesiyle objectExpressionoluş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 Integerbir 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

Ayrıca bkz.