Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bir modülde bir programlama öğesi bildirdiğinizde, Visual Basic bu öğenin kapsamını modülü içeren ad alanına yükselter. Bu, tip terfisi olarak bilinir.
Aşağıdaki örnekte bir modülün iskelet tanımı ve bu modülün iki üyesi gösterilmektedir.
Namespace projNamespace
Module projModule
Public Enum basicEnum As Integer
one = 1
two = 2
End Enum
Public Class innerClass
Shared Sub numberSub(ByVal firstArg As Integer)
End Sub
End Class
End Module
End Namespace
Modül düzeyinde bildirilen programlama öğeleri, projModule içinde terfi ettirilir. Önceki örnekte, basicEnum ve innerClass yükseltilir, ancak numberSub yükseltilmez çünkü modül düzeyinde bildirilmemiştir.
Tür Yükseltmenin Etkisi
Tür yükseltmenin etkisi, bir niteleme dizesinin modül adını içermesi gerekmemesidir. Aşağıdaki örnek, önceki örnekte yordama iki çağrı yapar.
Sub usePromotion()
projNamespace.projModule.innerClass.numberSub(projNamespace.projModule.basicEnum.one)
projNamespace.innerClass.numberSub(projNamespace.basicEnum.two)
End Sub
Yukarıdaki örnekte, ilk çağrı tam niteleme dizelerini kullanır. Ancak, tür yükseltme nedeniyle bu gerekli değildir. İkinci çağrı, başvuru dizelerinde projModule içermeden modülün üyelerine de erişir.
Tip Yükseltmenin Yenilgisi
Ad alanında zaten modül üyesiyle aynı ada sahip bir üye varsa, bu modül üyesi için tür yükseltmesi etkisiz hale getirilir. Aşağıdaki örnekte bir sabit listesi ve aynı ad alanı içindeki bir modülün iskelet tanımı gösterilmektedir.
Namespace thisNamespace
Public Enum abc
first = 1
second
End Enum
Module thisModule
Public Class abc
Public Sub abcSub()
End Sub
End Class
Public Class xyz
Public Sub xyzSub()
End Sub
End Class
End Module
End Namespace
Önceki örnekte, ad alanı düzeyinde aynı ada sahip bir numaralandırma zaten bulunduğundan Visual Basic, abc sınıfını thisNameSpace olarak terfi ettiremez. öğesine erişmek abcSubiçin tam niteleme dizesini thisNamespace.thisModule.abc.abcSubkullanmanız gerekir. Ancak, sınıf xyz hala önemsenir ve daha kısa niteleme dizesi xyzSub ile thisNamespace.xyz.xyzSub öğesine erişebilirsiniz.
Kısmi Türler için Tür Yükseltmesinin Yenilgisi
Bir modülün içindeki bir sınıf veya yapı Partial anahtar sözcüğünü kullanıyorsa, ad alanının aynı ada sahip bir üyesi olup olmadığına bakılmaksızın, bu sınıf veya yapı için tür tanıtımı otomatik olarak engellenir. Modüldeki diğer öğeler hala tür yükseltme için uygundur.
Sonuçlar. Kısmi tanımın tür yükseltmesinin yenilgisi beklenmeyen sonuçlara ve hatta derleyici hatalara neden olabilir. Aşağıdaki örnekte, bir sınıfın bir modül içinde yer alan iskelet kısmi tanımları gösterilmektedir.
Namespace sampleNamespace
Partial Public Class sampleClass
Public Sub sub1()
End Sub
End Class
Module sampleModule
Partial Public Class sampleClass
Public Sub sub2()
End Sub
End Class
End Module
End Namespace
Yukarıdaki örnekte, geliştirici derleyicinin iki kısmi tanımını birleştirmesini sampleClassbekleyebilir. Ancak, derleyici sampleModule içindeki kısmi tanım için yükseltmeyi dikkate almaz. Sonuç olarak, aynı isimdeki sampleClass fakat farklı niteleme yollarına sahip iki ayrı ve bağımsız sınıfı derlemeye çalışır.
Derleyici, kısmi tanımları yalnızca tam yolları aynı olduğunda birleştirir.
Öneriler
Aşağıdaki öneriler iyi programlama uygulamalarını temsil eder.
Benzersiz Adlar. Programlama öğelerinin adlandırması üzerinde tam denetime sahip olduğunuzda, her yerde benzersiz adlar kullanmak her zaman iyi bir fikirdir. Özdeş adlar ek nitelik gerektirir ve kodunuzun okunmasını zorlaştırabilir. Bunlar ayrıca ince hatalara ve beklenmeyen sonuçlara yol açabilir.
Tam Yetkinlik Aynı ad alanındaki modüller ve diğer öğelerle çalışırken en güvenli yaklaşım, tüm programlama öğeleri için her zaman tam niteleme kullanmaktır. Tür tanıtımı bir modül üyesi için başarısız olursa ve bu üyeyi tamamen belgelemezseniz, istemeden farklı bir programlama unsuruna erişebilirsiniz.