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.
Kodunuz bir bildirilen öğeye başvurduğunda, Visual Basic derleyicisi, referansınızdaki adı, bu adın uygun bildirimiyle eşleştirir. Aynı adla birden fazla öğe bildirilirse, bu öğelerden hangisine başvurulabileceğini, adını niteleyerek denetleyebilirsiniz.
Derleyici, ad başvurularını en dar kapsamlı bir ad bildirimiyle eşleştirmeye çalışır. Bu, referans oluşturan kodla başladığı ve iç içe geçmiş öğelerin ardışık seviyeleri boyunca dışa doğru çalıştığı anlamına gelir.
Aşağıdaki örnekte aynı ada sahip iki değişkene referanslar gösterilmektedir. Örnek, modülünün totalCountfarklı kapsam düzeylerinde her biri adlı containeriki değişken bildirir. Yordam showCount niteleme olmadan görüntülendiğinde, Visual Basic derleyicisi, en dar kapsam olan totalCount içindeki yerel bildirim için başvuruyu çözümler. içeren modülüyle totalCountnitelendiğindecontainer, derleyici bildirimine başvuruyu daha geniş kapsamlı bir şekilde çözümler.
' Assume these two modules are both in the same assembly.
Module container
Public totalCount As Integer = 1
Public Sub showCount()
Dim totalCount As Integer = 6000
' The following statement displays the local totalCount (6000).
MsgBox("Unqualified totalCount is " & CStr(totalCount))
' The following statement displays the module's totalCount (1).
MsgBox("container.totalCount is " & CStr(container.totalCount))
End Sub
End Module
Module callingModule
Public Sub displayCount()
container.showCount()
' The following statement displays the containing module's totalCount (1).
MsgBox("container.totalCount is " & CStr(container.totalCount))
End Sub
End Module
Öğe Adını Niteleme
Bu arama işlemini geçersiz kılmak ve daha geniş bir kapsamda bildirilen bir ad belirtmek istiyorsanız, adı daha geniş kapsamın içeren öğesiyle nitelemeniz gerekir. Bazı durumlarda, içeren öğeyi nitelemeniz de gerekebilir.
Bir ismi nitelendirmek, hedef öğenin tanımlandığı yeri belirten bilgileri kaynak ifadenize eklemektir. Bu bilgilere niteleme dizesi adı verilir. Bir veya daha fazla ad alanı ve modül, sınıf veya yapı içerebilir.
Niteleme dizesi, hedef öğeyi içeren modülü, sınıfı veya yapıyı kesin olarak belirtmelidir. Kapsayıcı da genellikle bir ad alanı olan başka bir içeren öğede bulunabilir. Niteleme dizesine birkaç içeren öğe eklemeniz gerekebilir.
Bildirilen bir öğeye adını niteleyerek erişmek için
Öğesinin tanımlandığı konumu belirleyin. Buna bir ad alanı, hatta ad alanı hiyerarşisi de dahil olabilir. En düşük düzey ad alanında, öğesi bir modülde, sınıfta veya yapıda bulunmalıdır.
' Assume the following hierarchy exists outside your code. Namespace outerSpace Namespace innerSpace Module holdsTotals Public Structure totals Public thisTotal As Integer Public Shared grandTotal As Long End Structure End Module End Namespace End NamespaceHedef öğenin konumuna göre bir niteleme yolu belirleyin. En üst düzey ad alanıyla başlayın, en düşük düzey ad alanına geçin ve hedef öğeyi içeren modül, sınıf veya yapıyla bitirin. Yoldaki her öğe, onu izleyen öğeyi içermelidir.
outerSpaceinnerSpace→ →holdsTotals→totalsHedef öğe için niteleme dizesini hazırlayın. Yoldaki her öğenin sonuna nokta (
.) yerleştirin. Uygulamanızın nitelik dizenizdeki her öğeye erişimi olmalıdır.outerSpace.innerSpace.holdsTotals.totals.Hedef öğeye başvuran ifadeyi veya atama deyimini normal şekilde yazın.
grandTotal = 9000Hedef öğe adının önüne nitelik dizesi ekleyin. Ad hemen öğesini içeren modülü, sınıfı veya yapıyı izleyen dönemi (
.) takip etmelidir.' Assume the following module is part of your code. Module accessGrandTotal Public Sub setGrandTotal() outerSpace.innerSpace.holdsTotals.totals.grandTotal = 9000 End Sub End ModuleDerleyici, hedef öğe referansıyla eşleşen açık ve net bir beyan bulmak için niteleme dizesini kullanır.
Uygulamanızın aynı ada sahip birden fazla programlama öğesine erişimi varsa bir isim referansını nitelemeniz de gerekebilir. Örneğin, System.Windows.Forms ve System.Web.UI.WebControls ad alanlarının her ikisi de bir Label sınıfını (System.Windows.Forms.Label ve System.Web.UI.WebControls.Label) içerir. Uygulamanız her ikisini de kullanıyorsa veya kendi Label sınıfını tanımlıyorsa, farklı Label nesneleri ayırt etmeniz gerekir. Değişken bildirimine ad alanını veya içe aktarma takma adını ekleyin. Aşağıdaki örnekte ithalat takma adı kullanılır.
' The following statement must precede all your declarations.
Imports win = System.Windows.Forms, web = System.Web.UI.WebControls
' The following statement references the Windows.Forms.Label class.
Dim winLabel As New win.Label()
Diğer İçeren Öğelerin Üyeleri
Başka bir sınıfın veya yapının paylaşılmayan bir üyesini kullandığınızda, önce üye adını sınıfın veya yapının bir örneğine işaret eden bir değişken veya ifadeyle nitelemeniz gerekir. Aşağıdaki örnekte, demoClass adlı bir sınıfın class1 örneği verilmiştir.
Dim demoClass As class1 = New class1()
demoClass.someSub[(argumentlist)]
Paylaşılan olmayan bir üyeyi nitelemek için sınıf adının kendisini kullanamazsınız. Önce bir nesne değişkeninde (bu örnekte demoClass) bir örnek oluşturmanız ve ardından buna değişken adıyla başvurmanız gerekir.
Bir sınıfın veya yapının üyesi Shared varsa, bu üyeyi sınıf veya yapı adıyla ya da bir örneğe işaret eden bir değişken veya ifadeyle niteleyebilirsiniz.
Bir modülün ayrı bir örneği yoktur ve tüm üyeleri varsayılan olarak vardır Shared . Bu nedenle, bir modül üyesini modül adıyla nitelersiniz.
Aşağıdaki örnekte modül üyesi yordamlarına yönelik nitelikli başvurular gösterilmektedir. Örnek, bir projedeki farklı modüllerde Sub adlı iki perform yordam bildirir. Her biri kendi modülü içinde niteleme olmadan belirtilebilir, ancak başka herhangi bir yerden başvurulursa nitelenmelidir. Çünkü son başvuru module3 ile perform eşleşmediği için, derleyici bu başvuruyu çözümleyemez.
' Assume these three modules are all in the same assembly.
Module module1
Public Sub perform()
MsgBox("module1.perform() now returning")
End Sub
End Module
Module module2
Public Sub perform()
MsgBox("module2.perform() now returning")
End Sub
Public Sub doSomething()
' The following statement calls perform in module2, the active module.
perform()
' The following statement calls perform in module1.
module1.perform()
End Sub
End Module
Module module3
Public Sub callPerform()
' The following statement calls perform in module1.
module1.perform()
' The following statement makes an unresolvable name reference
' and therefore generates a COMPILER ERROR.
perform() ' INVALID statement
End Sub
End Module
Projelere Referanslar
Başka bir projede tanımlanan Genel öğeleri kullanmak için, önce bu projenin derlemesine veya tür kitaplığına bir başvuru ayarlamanız gerekir. Başvuru ayarlamak için, Proje menüsünde Başvuru Ekle'ye tıklayın veya -reference (Visual Basic) komut satırı derleyicisi seçeneğini kullanın.
Örneğin, .NET Framework'ün XML nesne modelini kullanabilirsiniz. System.Xml ad alanına bir başvuru ayarlarsanız, XmlDocument gibi sınıflarından herhangi birini bildirebilir ve kullanabilirsiniz. Aşağıdaki örnekte XmlDocumentkullanılır.
' Assume this project has a reference to System.Xml
' The following statement creates xDoc as an XML document object.
Dim xDoc As System.Xml.XmlDocument
İçeren Öğeleri İçeri Aktarma
Kullanmak istediğiniz modülleri veya sınıfları içeren ad alanlarını içeri aktarmak için Imports Deyimi'ni (.NET Ad Alanı ve Türü) kullanabilirsiniz. Bu, içeri aktarılan ad alanında tanımlanan öğelere adlarını tam olarak nitelemeden başvurmanızı sağlar. Önceki örneği, System.Xml ad alanını içeri aktarmak için aşağıdaki gibi yeniden yazar.
' Assume this project has a reference to System.Xml
' The following statement must precede all your declarations.
Imports System.Xml
' The following statement creates xDoc as an XML document object.
Dim xDoc As XmlDocument
Ayrıca, Imports ifadesi, içeri aktarılan her ad alanı için bir içe aktarma takma adı tanımlayabilir. Bu, kaynak kodu daha kısa ve okunmasını kolaylaştırabilir. Önceki örnek, xD ad alanı için bir takma ad olarak System.Xml kullanmak üzere yeniden yazılır.
' Assume this project has a reference to System.Xml
' The following statement must precede all your declarations.
Imports xD = System.Xml
' The following statement creates xDoc as an XML document object.
Dim xDoc As xD.XmlDocument
deyimi Imports , diğer projelerden öğeleri uygulamanızın kullanımına sunmaz. Yani, bir başvuru ayarlamanın yerine geçmez. Bir ad alanının içeri aktarılması, yalnızca bu ad alanında tanımlanan adları niteleme gereksinimini ortadan kaldırır.
Ayrıca modüller, sınıflar, yapılar ve numaralandırmaları içeri aktarmak için deyimini de kullanabilirsiniz Imports . Daha sonra bu tür içeri aktarılan öğelerin üyelerini niteleme olmadan kullanabilirsiniz. Ancak, sınıfların ve yapıların paylaşılmayan üyelerini her zaman sınıfın veya yapının bir örneğini değerlendiren bir değişken veya ifadeyle nitelemeniz gerekir.
Adlandırma Yönergeleri
Aynı ada sahip iki veya daha fazla programlama öğesi tanımladığınızda, derleyici bu ada yönelik bir başvuruyu çözümlemeye çalıştığında ad belirsizliği oluşabilir. Kapsam içinde birden fazla tanım varsa veya kapsam içinde tanım yoksa, başvuru çözümlenemez. Bir örnek için bu Yardım sayfasındaki "Nitelenmiş Başvuru Örneği" bölümüne bakın.
Tüm öğelerinize benzersiz adlar vererek ad belirsizliğini önleyebilirsiniz. Ardından ad alanı, modül veya sınıfla adını nitelemenize gerek kalmadan herhangi bir öğeye başvuruda bulunabilirsiniz. Ayrıca yanlışlıkla yanlış öğeye başvurma olasılığını da azaltabilirsiniz.
Gölgeleme
İki programlama öğesi aynı adı paylaştığında, bunlardan biri diğerini gizleyebilir veya gölgeleyebilir. Gölgeli öğe başvuru için kullanılamaz; bunun yerine, kodunuz gölgeli öğe adını kullandığında, Visual Basic derleyicisi bunu gölgelenen öğeye çözümler. Örneklerle ilgili daha ayrıntılı bir açıklama için bkz. Visual Basic'te Gölgelendirme.