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ı belirsizliği önler ve sınıf kitaplıkları gibi büyük nesne grupları kullanılırken başvuruları basitleştirir.

Örneğin, .NET Framework ad alanında System.Windows.Forms sınıfı tanımlarListBox. Aşağıdaki kod parçası, bu sınıf için tam adı kullanarak bir değişkenin nasıl bildir yapılacağını gösterir:

Dim LBox As System.Windows.Forms.ListBox

Ad Çakışmalarını Önleme

.NET Framework ad alanları bazen ad alanı kirliliği olarak adlandırılan ve bir sınıf kitaplığının geliştiricisinin başka bir kitaplıkta benzer adların kullanılmasıyla engellendiği bir sorunu giderir. Var olan bileşenlerle bu çakışmalara bazen ad çakışmaları adı verilir.

Örneğin, adlı ListBoxyeni bir sınıf oluşturursanız, niteleme olmadan projenizin içinde kullanabilirsiniz. Ancak, .NET Framework ListBox sınıfını aynı projede kullanmak istiyorsanız, başvuruyu benzersiz hale getirmek için tam başvuru kullanmanız gerekir. Başvuru benzersiz değilse, Visual Basic adın belirsiz olduğunu belirten bir hata oluşturur. Aşağıdaki kod örneği, bu nesnelerin nasıl bildir yapılacağını gösterir:

' 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, her ikisi de adlı ListBoxbir nesne içeren iki ad alanı hiyerarşisi gösterilmektedir:

Screenshot that shows two namespace hierarchies.

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

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

Tam Adlar

Tam adlar, nesnenin tanımlandığı ad alanının adıyla önekli nesne başvurularıdır. Sınıfına başvuru oluşturursanız (Proje menüsünden Başvuru Ekle'yi seçerek) diğer projelerde tanımlanan nesneleri kullanabilir ve ardından kodunuzda nesne için tam adı kullanabilirsiniz. Aşağıdaki kod parçası, başka bir projenin ad alanındaki bir nesne için tam adın nasıl kullanılacağını gösterir:

Dim LBC As New ListBoxProject.Form1.ListBox

Tam adlar, derleyicinin hangi nesnenin kullanıldığını belirlemesini mümkün hale getirmeleri nedeniyle adlandırma çakışmalarını engeller. Ancak, adların kendileri uzun ve hantal olabilir. Bu sorunu çözmek için deyimini Imports kullanarak tam ad yerine kullanabileceğiniz kısaltılmış bir ad olan diğer ad tanımlayabilirsiniz. Örneğin, aşağıdaki kod örneği iki tam ad için diğer adlar oluşturur ve iki nesne 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

Deyimini Imports bir diğer ad olmadan kullanırsanız, bu ad alanı içindeki tüm adları projeye özgü olmaları koşuluyla niteleme olmadan kullanabilirsiniz. Projeniz aynı ada sahip öğeler içeren ad alanlarının deyimlerini içeriyorsa Imports , kullandığınızda bu adı tam olarak nitelemeniz gerekir. Örneğin, projenizin aşağıdaki iki Imports deyimi içerdiğini varsayalım:

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

Tam olarak nitelemeden kullanmayı Class1 denerseniz, Visual Basic adın Class1 belirsiz olduğunu belirten bir hata üretir.

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 yerleştirilmiş bir ad alanı hiyerarşisi tanımladıysanız, bu hiyerarşinin içindeki kodun .NET Framework'ün ad alanına erişmesi System engellenebilir. Aşağıdaki örnek, ad alanının erişimini Systemengellediği bir hiyerarşiyi SpecialSpace.System gösterir.

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 derleyicisi için başvuruyu System.Int32başarıyla çözümleyemiyor çünkü SpecialSpace.System tanımlamıyor Int32. Niteleme zincirini Global .NET Framework sınıf kitaplığının en dış düzeyinde başlatmak için anahtar sözcüğünü kullanabilirsiniz. Bu, sınıf kitaplığında ad alanını System veya başka bir ad alanını 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 diğer kök düzeyinde ad alanlarına Microsoft.VisualBasicve projenizle ilişkilendirilmiş herhangi bir ad alanına erişmek için kullanabilirsinizGlobal.

Ad Alanı Deyimlerinde Genel Anahtar Sözcük

Ad Alanı Deyiminde anahtar sözcüğünü Global de kullanabilirsiniz. Bu, projenizin kök ad alanının dışında 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, projenizin adı ConsoleApplication1ise, programlama öğeleri ad alanına ConsoleApplication1aittir. bildirirseniz Namespace Magnetosphere, projedeki başvurular Magnetosphere öğesine erişecektir ConsoleApplication1.Magnetosphere.

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

Namespace Global.Magnetosphere

End Namespace


Namespace Global
    Namespace Magnetosphere

    End Namespace
End Namespace

Ad alanı bildiriminde, Global başka bir ad alanında iç içe yerleştirilemez.

Projenin Kök Ad Alanını görüntülemek ve değiştirmek için Uygulama Sayfası, Project Tasarım Aracı (Visual Basic) kullanabilirsiniz. Yeni projeler için Kök Ad Alanı varsayılan olarak proje adını kullanır. Global En üst düzey ad alanı olması için, kutunun boş olması için Kök Ad Alanı girdisini temizleyebilirsiniz. Kök Ad Alanı'nın temizlenmesi, ad alanı bildirimlerinde anahtar sözcük gereksinimini Global ortadan kaldırır.

Bir Namespace deyim aynı zamanda .NET Framework'te bir ad alanı olan bir ad bildirirse, anahtar sözcük tam ad içinde kullanılmazsa Global .NET Framework ad alanı kullanılamaz duruma gelir. Anahtar sözcüğünü kullanmadan Global bu .NET Framework ad alanına erişimi etkinleştirmek için deyimine Global anahtar sözcüğünü Namespace ekleyebilirsiniz.

Aşağıdaki örnekte ad alanı bildiriminde System.Text anahtar sözcüğü yer alırGlobal.

Global anahtar sözcüğü ad alanı bildiriminde yoksa, StringBuilder belirtilmeden Global.System.Text.StringBuildererişilemiyordu. adlı ConsoleApplication1bir proje için System.Text anahtar sözcük kullanılmadıysa Global öğesine başvurular erişebilirConsoleApplication1.System.Text.

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.