Aracılığıyla paylaş


İle... End With Deyimi (Visual Basic)

Deyimlerinin nesne veya yapı üyelerine erişirken basitleştirilmiş bir söz dizimi kullanabilmesi için tek bir nesneye veya yapıya sürekli başvuran bir dizi deyimi yürütür.

Sözdizimi

With objectExpression
    [ statements ]
End With

Parçalar

Süre Tanım
objectExpression Gerekli. Bir nesne olarak değerlendirilen ifade. İfade rastgele karmaşık olabilir ve yalnızca bir kez değerlendirilir. İfade, temel türler de dahil olmak üzere herhangi bir veri türünü değerlendirebilir.
statements Opsiyonel. 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 bir ifadeyi birden çok kez değerlendirmeniz veya üyelerine birden çok kez başvurmak için sonucu geçici bir değişkene atamanız gerekmez.

  • Yinelenen niteleyici ifadeleri ortadan kaldırarak kodunuzu daha okunabilir 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 yapı ise objectExpression , üyelerine atama yeteneği yapı ifadesinin başvurulup başvurulamayacağına bağlıdır. Doğrudan başvurulabilen yapıların üyelerine (değişkenler, dizi öğeleri veya alanlar gibi) atayabilirsiniz, ancak işlevlerden, özelliklerden veya işleçlerden değerle döndürülen yapıların üyelerine değer atamaya çalışırsanız ya da başvuru bağlarını kesmek için parantezler kullanıldığında (örneğin, With (structureVariable)) hata 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. Her iki durumda da sorun, yapının yalnızca çağrı yığınında mevcut olması ve bu durumlarda değiştirilmiş bir yapı üyesinin programdaki diğer kodların değişikliği gözlemleyebilecekleri bir konuma yazabilmesinin hiçbir yolu olmamasıdır.

objectExpression, bloğuna girdikten sonra bir kez değerlendirilir. öğesini bloğun içinden objectExpression yeniden atayamazsınızWith.

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çermiyorsa, 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ı.

Uyarı

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

Örnek 3

Aşağıdaki örnekte deyimlerin yapılarla nasıl With...End With çalıştığı gösterilmektedir. Başvurulabilir yapıların üyelerine (dizi öğeleri gibi) atayabilirsiniz, ancak değer tarafından döndürülen yapılara veya parantezler kullanıldığında atanamaz.

Private Sub DemonstrateStructureWithStatement()
    ' Create an array of structures - this is referenceable
    Dim points(2) As Point

    ' Valid: Array elements are referenceable, so assignments work
    With points(0)
        .X = 10
        .Y = 20
    End With

    ' Create a single structure variable - this is also referenceable
    Dim singlePoint As Point
    With singlePoint
        .X = 30
        .Y = 40
    End With

    ' Invalid: Using parentheses cuts reference ties
    ' With (points(0))
    '     .X = 50  ' This would cause BC30068 error
    '     .Y = 60
    ' End With

    ' Invalid: Function returns by value, not referenceable
    ' With GetPoint()
    '     .X = 70  ' This would cause BC30068 error
    '     .Y = 80
    ' End With
End Sub

Private Function GetPoint() As Point
    Return New Point With {.X = 1, .Y = 2}
End Function

Private Structure Point
    Public X As Integer
    Public Y As Integer
End Structure

Ayrıca bakınız