Visual Basic'de Ad Alanları

Ad alanları bir derlemede tanımlanan nesneleri düzenler. Derlemeler birden çok ad alanı içerebilir ve bu da diğer ad alanlarını içerebilir. Ad alanları, sınıf kitaplıkları gibi büyük nesne gruplarını kullanırken belirsizlik ve başvuruları basitleştirir.

örneğin, .NET Framework ListBox System.Windows.Forms ad alanındaki sınıfını tanımlar. Aşağıdaki kod parçası, bu sınıf için tam nitelikli adı kullanarak bir değişkenin nasıl bildirilemeyeceğini göstermektedir:

Dim LBox As System.Windows.Forms.ListBox

Ad çakışmalarını önleme

.NET Framework ad alanları, bazen bir sınıf kitaplığı geliştiricisinin başka bir kitaplıktaki benzer adların kullanımıyla birlikte olduğu ad alanı kirliliğine de denilen bir sorunu ele alırlar. Var olan bileşenlerle ilgili bu çakışmalar bazen ad çarpışmaları olarak adlandırılır.

Örneğin, adlı yeni bir sınıf oluşturursanız ListBox , bunu proje içinde nitelik olmadan kullanabilirsiniz. ancak .NET Framework ListBox sınıfını aynı projede kullanmak istiyorsanız, başvuruyu benzersiz hale getirmek için tam olarak nitelenmiş bir başvuru kullanmanız gerekir. başvuru benzersiz değilse, Visual Basic adın belirsiz olduğunu belirten bir hata üretir. Aşağıdaki kod örneği, bu nesnelerin nasıl bildirileceğini göstermektedir:

' Define a new object based on your ListBox class.
Dim LBC As New ListBox
' Define a new Windows.Forms ListBox control.
Dim MyLB As New System.Windows.Forms.ListBox

Aşağıdaki çizimde adında bir nesne içeren iki ad alanı hiyerarşisi gösterilmektedir ListBox :

İki ad alanı hiyerarşisi gösteren ekran görüntüsü.

varsayılan olarak, Visual Basic ile oluşturduğunuz her çalıştırılabilir dosya, projenizle aynı ada sahip bir ad alanı içerir. Örneğin, adlı bir proje içinde bir nesne tanımlarsanız ListBoxProject , çalıştırılabilir dosya ListBoxProject.exe adlı bir ad alanı içerir ListBoxProject .

Birden çok derleme aynı ad alanını kullanabilir. Visual Basic, bunları tek bir ad kümesi olarak değerlendirir. Örneğin, adlı bir derlemede adlı bir ad alanı için sınıflar tanımlayabilir SomeNameSpace Assemb1 ve adlı bir derlemeden aynı ad alanı için ek sınıflar tanımlayabilirsiniz Assemb2 .

Tam nitelikli adlar

Tam nitelikli adlar, nesnenin tanımlandığı ad alanının adı önekli nesne başvurulardır. sınıfa bir başvuru oluşturursanız ( Project menüsünden başvuru ekle ' yi seçerek) diğer projelerde tanımlı nesneleri kullanabilirsiniz ve sonra kodunuzda nesne için tam adı kullanın. Aşağıdaki kod parçası, başka bir projenin ad alanından bir nesne için tam olarak nitelenmiş adın nasıl kullanılacağını gösterir:

Dim LBC As New ListBoxProject.Form1.ListBox

Tam nitelikli adlar, derleyicinin hangi nesnenin kullanılmakta olduğunu belirlemesini olanaklı kıdığından, adlandırma çakışmalarını önler. Ancak, adları uzun ve çok daha fazla alabilir. Bu sorunu gidermek için, bir Imports diğer ad tanımlamak için ifadesini kullanabilirsiniz — bir tam adı yerine kullanabileceğiniz kısaltılmış bir addır. Örneğin, aşağıdaki kod örneği iki tam ad için diğer adlar oluşturur ve iki nesneyi tanımlamak için bu diğer adları kullanır.

Imports LBControl = System.Windows.Forms.ListBox
Imports MyListBox = ListBoxProject.Form1.ListBox
Dim LBC As LBControl
Dim MyLB As MyListBox

Importsİfadesini bir diğer ad olmadan kullanırsanız, bu ad alanındaki tüm adları, proje için benzersiz olmaları şartıyla, nitelendirme olmadan kullanabilirsiniz. Projeniz Imports aynı ada sahip öğeleri içeren ad alanları için deyimler içeriyorsa, bu adı kullandığınızda bu adı tam olarak nitelemeniz gerekir. Örneğin, projenizin aşağıdaki iki deyimi içerdiğini varsayalım Imports :

' This namespace contains a class called Class1.
Imports MyProj1
' This namespace also contains a class called Class1.
Imports MyProj2

Class1tam nitelikli olmadan kullanmaya çalışırsanız, Visual Basic adın belirsiz olduğunu belirten bir hata üretir Class1 .

Ad alanı düzeyi deyimleri

Bir ad alanı içinde modüller, arabirimler, sınıflar, temsilciler, numaralandırmalar, yapılar ve diğer ad alanları gibi öğeleri tanımlayabilirsiniz. Ad alanı düzeyinde özellikler, yordamlar, değişkenler ve olaylar gibi öğeleri tanımlayamazsınız. Bu öğeler modüller, yapılar veya sınıflar gibi kapsayıcılar içinde bildirilmelidir.

Tam adlarda genel anahtar sözcük

İç içe geçmiş bir ad alanı hiyerarşisi tanımladıysanız, bu hiyerarşinin içindeki kodun System .NET Framework ad alanına erişmesi engellenebilir. Aşağıdaki örnekte, SpecialSpace.System ad alanının erişimini engellediği bir hiyerarşi gösterilmektedir System .

Namespace SpecialSpace  
    Namespace System  
        Class abc  
            Function getValue() As System.Int32  
                Dim n As System.Int32  
                Return n  
            End Function  
        End Class  
    End Namespace  
End Namespace  

sonuç olarak, Visual Basic derleyici öğesine başvurusunu başarıyla çözümleyemiyor System.Int32 , çünkü SpecialSpace.System tanımlamaz Int32 . Globalanahtar sözcüğünü, .NET Framework sınıf kitaplığının en dıştaki düzeyinde nitelik zinciri başlatmak için kullanabilirsiniz. Bu, System sınıf kitaplığında ad alanı veya diğer ad alanı belirtmenize olanak tanır. Aşağıdaki örnek bunu göstermektedir.

Namespace SpecialSpace  
    Namespace System  
        Class abc  
            Function getValue() As Global.System.Int32  
                Dim n As Global.System.Int32  
                Return n  
            End Function  
        End Class  
    End Namespace  
End Namespace  

Gibi Global diğer kök düzeyi ad alanlarına Microsoft.VisualBasic ve projenizle ilişkili herhangi bir ad alanına erişmek için öğesini kullanabilirsiniz.

Namespace deyimlerde Global anahtar sözcüğü

GlobalBir Namespace deyimindekianahtar sözcüğünü de kullanabilirsiniz. Bu, projenizin kök ad alanından bir ad alanı tanımlamanızı sağlar.

Projenizdeki tüm ad alanları, projenin kök ad alanını temel alır. Visual Studio projenizdeki tüm kodlar için proje adınızı varsayılan kök ad alanı olarak atar. Örneğin, projeniz adlandırılmışsa ConsoleApplication1 , programlama öğeleri ad alanına aittir ConsoleApplication1 . Bildirirseniz Namespace Magnetosphere , Magnetosphere projedeki başvuruları erişir ConsoleApplication1.Magnetosphere .

Aşağıdaki örneklerde, Global projenin kök ad alanından dışarı bir ad alanı bildirmek için anahtar sözcüğü kullanılır.

Namespace Global.Magnetosphere

End Namespace


Namespace Global
    Namespace Magnetosphere

    End Namespace
End Namespace

Bir ad alanı bildiriminde, Global başka bir ad alanında iç içe geçirilemez.

projenin kök ad alanını görüntülemek ve değiştirmek için Project tasarımcı (Visual Basic) uygulama sayfasını kullanabilirsiniz. Yeni projeler için, kök ad alanı varsayılan olarak proje adı olur. GlobalEn üst düzey ad alanı olmasını sağlamak için, kök ad alanı girişini temizleyerek kutunun boş olması gerekir. Kök ad alanını Temizleme, Global ad alanı bildirimlerinde anahtar kelimesinin gereksinimini ortadan kaldırır.

bir Namespace deyimde .NET Framework bir ad alanı olan bir ad bildirirse, Global anahtar sözcüğü tam bir ad içinde kullanılmıyorsa, .NET Framework ad alanı kullanılamaz hale gelir. anahtar sözcüğünü kullanmadan bu .NET Framework ad alanına erişimi etkinleştirmek için Global , Global anahtar sözcüğünü Namespace deyime ekleyebilirsiniz.

Aşağıdaki örnek, Global System.Text ad alanı bildiriminde anahtar kelimedir.

GlobalAnahtar sözcüğü ad alanı bildiriminde yoksa, StringBuilder belirtilmeden erişilemez Global.System.Text.StringBuilder . Adlı bir proje için ConsoleApplication1 , System.Text ConsoleApplication1.System.Text Global anahtar sözcüğü kullanılsaydı başvurular erişim sağlar.

Module Module1
    Sub Main()
        Dim encoding As New System.Text.TitanEncoding

        ' If the namespace defined below is System.Text
        ' instead of Global.System.Text, then this statement
        ' causes a compile-time error.
        Dim sb As New System.Text.StringBuilder
    End Sub
End Module

Namespace Global.System.Text
    Class TitanEncoding

    End Class
End Namespace

Ayrıca bkz.