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 containerfarklı kapsam düzeylerinde her biri adlı totalCountiki değişken bildirir. Yordam showCount niteleme olmadan görüntülendiğinde totalCount , Visual Basic derleyicisi bildirimine başvuruyu içinde yerel bildirim showCountolarak en dar kapsamlı şekilde çözümler. içeren modülüyle containernitelendiğ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

  1. Öğ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  
    
  2. 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.

    outerSpaceinnerSpace → → holdsTotalstotals

  3. 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.  
    
  4. Hedef öğeye başvuran ifadeyi veya atama deyimini normal şekilde yazın.

    grandTotal = 9000  
    
  5. 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  
    
  6. 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ı demoClassclass1bir 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ı performiki 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 performolmadığı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.

Ayrıca bkz.