Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Amikor egy modulban deklarál egy programozási elemet, a Visual Basic előlépteti annak hatókörét a modult tartalmazó névtérre. Ezt típus-előléptetésnek nevezzük.
Az alábbi példa egy modul és a modul két tagjának csontvázdefinícióját mutatja be.
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
A projModule-on belül a modulszinten deklarált programozási elemek előléptetődnek a projNamespace-be. Az előző példában basicEnum-t és innerClass-t előléptetik, de numberSub-t nem, mert nem modulszinten van deklarálva.
Típuselőléptetés hatása
A típus-előléptetés hatása, hogy a minősítési sztringnek nem kell tartalmaznia a modul nevét. Az alábbi példa két hívást kezdeményez az előző példában bemutatott eljáráshoz.
Sub usePromotion()
projNamespace.projModule.innerClass.numberSub(projNamespace.projModule.basicEnum.one)
projNamespace.innerClass.numberSub(projNamespace.basicEnum.two)
End Sub
Az előző példában az első hívás teljes minősítési sztringeket használ. Ez azonban a típus-előléptetés miatt nem szükséges. A második hívás a modul tagjaihoz is hozzáfér anélkül, hogy projModule-t tartalmazna a minősítési sztringekben.
A típuspromóció veresége
Ha a névtérnek már van egy olyan tagja, amelynek a neve megegyezik a modultag nevével, akkor a rendszer nem engedélyezi a típus-előléptetést a modultag számára. Az alábbi példa egy enumerálás és egy modul csontvázdefinícióját mutatja be ugyanabban a névtérben.
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
Az előző példában a Visual Basic nem tudja előléptetni az osztályt abcthisNameSpace , mert már létezik egy azonos nevű enumerálás a névtér szintjén. A hozzáféréshez abcSuba teljes minősítési karakterláncot thisNamespace.thisModule.abc.abcSubkell használnia. Azonban az xyz osztály továbbra is elő van léptetve, és elérhető a rövidebb minősítési sztring xyzSub használatával thisNamespace.xyz.xyzSub.
A típus-előléptetés sikertelensége részleges típusok esetén
Ha egy modulban egy osztály vagy struktúra a Részleges kulcsszót használja, a rendszer automatikusan elutasítja a típus-előléptetést az adott osztály vagy struktúra esetében, függetlenül attól, hogy a névtérnek azonos nevű tagja van-e. A modul egyéb elemei továbbra is jogosultak a típus-előléptetésre.
Következmények. A részleges definíció típus-előléptetésének veresége váratlan eredményeket és még fordítóhibákat is okozhat. Az alábbi példa egy osztály részleges definícióit mutatja be, amelyek közül az egyik egy modulban található.
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
Az előző példában a fejlesztő elvárhatja, hogy a fordító egyesítse a két részleges definíciót sampleClass. A fordító azonban nem veszi figyelembe a részleges definíció előléptetését.sampleModule Ennek eredményeképpen két külön és különálló osztályt próbál összeállítani, mindkettő neve el van nevezve sampleClass , de különböző minősítési útvonalakkal.
A fordító csak akkor egyesíti a részleges definíciókat, ha azok teljes elérési útja azonos.
Ajánlások
Az alábbi javaslatok a helyes programozási gyakorlatot jelölik.
Egyedi nevek. Ha teljes mértékben szabályozhatja a programozási elemek elnevezését, mindig érdemes mindenhol egyedi neveket használni. Az azonos nevek további minősítést igényelnek, és megnehezíthetik a kód olvasását. Emellett apró hibákhoz és váratlan eredményekhez is vezethetnek.
Teljes képesítés. Amikor modulokkal és más elemekkel dolgozik ugyanabban a névtérben, a legbiztonságosabb módszer az, ha minden programozási elemhez teljes minősítést használ. Ha egy modultag esetében a típus-előléptetés meghiúsul, és ön nem jogosult teljes mértékben erre a tagra, véletlenül hozzáférhet egy másik programozási elemhez.