Aracılığıyla paylaş


Visual Basic'te Ad Alanları

Ad alanları, bir derlemede tanımlanan nesneleri düzenler. Derlemeler birden çok ad alanı içerebilir ve bu ad alanları da kendi içinde başka ad alanlarını barındırabilir. 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'te ListBox ad alanında System.Windows.Forms 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 bildirileceğini 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, bu başvuruyu benzersiz kılmak için tam olarak nitelendirilmiş bir 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 bildirileceğini 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:

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

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, SomeNameSpace adlı bir ad alanı için Assemb1 adlı bir derlemede sınıflar tanımlayabilir ve Assemb2 adlı bir derlemeden aynı ad alanı için ek sınıflar tanımlayabilirsiniz.

Tam Nitelikli İsimler

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, Imports deyimini kullanarak tam ad yerine kullanabileceğiniz kısaltılmış bir isim olan takma 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ına ait Imports deyimleri içeriyorsa, kullandığınızda bu adı tam 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

Class1 tam olarak tanımlamadan kullanmayı denerseniz, Visual Basic adın Class1 belirsiz olduğunu belirten bir hata oluşturur.

Ad Alanı Düzeyi İfadeler

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 Nitelikli İsimlerde Küresel 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, SpecialSpace.System ad alanının System'e erişimi engellediği bir hiyerarşiyi 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, System.Int32 başvurusunu başarıyla çözümleyemiyor, çünkü SpecialSpace.System, Int32 tanımlamıyor. 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 örnekte bu gösterilmektedir.

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  

Diğer kök düzeyindeki ad alanlarına, örneğin Global, ve projenizle ilişkilendirilmiş herhangi bir ad alanına erişmek için Microsoft.VisualBasic kullanabilirsiniz.

Ad Alanı Bildirimlerinde Global Anahtar Sözcük

Global anahtar sözcüğünü 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. Namespace Magnetosphere öğesini bildirirseniz, projedeki başvurular Magnetosphere ile ConsoleApplication1.Magnetosphere öğesine erişecektir.

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ı, Proje Tasarımcısı (Visual Basic) kullanabilirsiniz. Yeni projeler için Kök Ad Alanı varsayılan olarak proje adını kullanır. Global ad alanını en üst düzey ad alanı yapmak için, kutunun boş olmasını sağlamak amacıyla 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 deyimi, .NET Framework'te bir ad alanı olan bir ismi bildiriyorsa ve Global anahtar sözcüğü tam ad içinde kullanılmıyorsa, .NET Framework ad alanı kullanılamaz duruma gelir. Bu .NET Framework ad alanına Global anahtar sözcüğünü kullanmadan erişimi etkinleştirmek için, Global ifadesine Namespace anahtar sözcüğünü ekleyebilirsiniz.

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

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

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 bakınız