Tür Yükseltme (Visual Basic)
Bir modülde bir programlama öğesi bildirdiğinizde, Visual Basic bu öğenin kapsamını modülü içeren ad alanına yükselter. Bu tür yükseltme 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
içinde projModule
, modül düzeyinde bildirilen programlama öğeleri olarak projNamespace
yükseltilir. Yukarıdaki örnekte ve basicEnum
innerClass
yükseltilir, ancak numberSub
değil çü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ı, niteleme dizelerini eklemeden projModule
modülün üyelerine de erişir.
Tür 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 yenilir. 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
Yukarıdaki örnekte, ad alanı düzeyinde aynı ada sahip bir numaralandırma zaten olduğundan Visual Basic sınıfını abc
thisNameSpace
yükseltemiyor. öğesine erişmek abcSub
için tam niteleme dizesini thisNamespace.thisModule.abc.abcSub
kullanmanız gerekir. Ancak, sınıf xyz
yine yükseltilir ve daha kısa niteleme dizesi thisNamespace.xyz.xyzSub
ile erişebilirsinizxyzSub
.
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 olsun veya olmasın, bu sınıf veya yapı için tür yükseltmesi otomatik olarak yenilir. 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 sampleClass
bekleyebilir. Ancak, derleyici içinde sampleModule
kısmi tanım için yükseltmeyi dikkate almaz. Sonuç olarak, her ikisi de farklı sampleClass
niteleme yollarına sahip iki ayrı ve ayrı 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 Nitelik. 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 yükseltmesi bir modül üyesi için yenilirse ve bu üyeyi tam olarak nitelemezseniz, istemeden farklı bir programlama öğesine erişebilirsiniz.
Ayrıca bkz.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin