Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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