Bildirilmiş Öğelere Başvurular (Visual Basic)
Kodunuz bildirilen bir öğeye başvurduğunda, Visual Basic derleyicisi başvurunuzdaki adla bu adın uygun bildirimiyle eşleşir. 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, başvuruyu yapan kodla başladığı ve öğelerin birbirini izleyen düzeylerinde dışarı doğru çalıştığı anlamına gelir.
Aşağıdaki örnekte aynı ada sahip iki değişkene başvurular gösterilmektedir. Örnek, modülünün container
farklı kapsam düzeylerinde her biri adlı totalCount
iki değişken bildirir. Yordam showCount
niteleme olmadan görüntülendiğinde totalCount
, Visual Basic derleyicisi bildirimine başvuruyu içinde yerel bildirim showCount
olarak en dar kapsamlı şekilde çözümler. içeren modülüyle container
nitelendiğindetotalCount
, 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 adın nitelenmesi, kaynak deyiminizden önce hedef öğenin tanımlandığı yeri tanımlayan bilgilerle birlikte gelir. 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 Namespace
Hedef öğ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.
outerSpace
innerSpace
→ →holdsTotals
→totals
Hedef öğe için niteleme dizesini hazırlayın. Yoldaki her öğenin arkasına 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 = 9000
Hedef öğ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 Module
Derleyici, hedef öğe başvurusuyla eşleşebileceği net ve net bir bildirim bulmak için niteleme dizesini kullanır.
Uygulamanızın aynı ada sahip birden fazla programlama öğesine erişimi varsa bir ad başvurusunu nitelemeniz de gerekebilir. Örneğin, ve ad alanlarının System.Windows.Forms her ikisi de bir Label
sınıf (System.Windows.Forms.Label ve System.Web.UI.WebControls.Label) içerir.System.Web.UI.WebControls 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çeri aktarma diğer adını ekleyin. Aşağıdaki örnekte içeri aktarma diğer 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 adlı demoClass
class1
bir sınıfın ö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 her ikisi de adlı perform
iki Sub
yordam bildirir. Her biri kendi modülü içinde niteleme olmadan belirtilebilir, ancak başka herhangi bir yerden başvurulursa nitelenmelidir. içindeki module3
son başvuru uygun perform
olmadığından, 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 Başvurular
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. Ad alanına bir başvuru System.Xml ayarlarsanız, gibi XmlDocumentsınıflarından herhangi birini bildirebilir ve kullanabilirsiniz. Aşağıdaki örnekte kullanılır XmlDocument.
' 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. Aşağıdaki örnek, ad alanını içeri aktarmak System.Xml için önceki örneği 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 deyimi, Imports
içeri aktarılan her ad alanı için bir içeri aktarma diğer adı tanımlayabilir. Bu, kaynak kodu daha kısa ve okunmasını kolaylaştırabilir. Aşağıdaki örnek, ad alanı için diğer ad olarak kullanmak xD
üzere System.Xml önceki örneği yeniden yazar.
' 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 ayarlamak yerine almaz. 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 Kuralları
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ölge Kullanım
İ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.