Typ promocji (Visual Basic)
Przy deklarowaniu programowania elementu w module, Visual Basic promuje jej zakresu na obszar nazw zawierający moduł.Jest to znane jako typu promocji.
Poniższy przykład pokazuje szkielet definicji modułu i dwóch członków tego modułu.
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
W ramach projModule, programowania elementy zadeklarowane na poziomie modułu są podwyższony do projNamespace.W poprzednim przykładzie basicEnum i innerClass są wspierane, ale numberSub jest nie, ponieważ nie jest zadeklarowany jako na poziomie modułu.
Efekt typu promocji
Efekt promocji typu jest ciąg kwalifikacji nie musi zawierać nazwę modułu.Poniższy przykład powoduje, że dwa wywołania procedury w poprzednim przykładzie.
Sub usePromotion()
projNamespace.projModule.innerClass.numberSub(projNamespace.projModule.basicEnum.one)
projNamespace.innerClass.numberSub(projNamespace.basicEnum.two)
End Sub
W poprzednim przykładzie pierwsze wywołanie używa ciągów pełne kwalifikacje.Jednakże nie jest to konieczne ze względu na rodzaj promocji.Drugie wywołanie również uzyskuje dostęp do modułu członków bez łącznie z projModule w ciągach kwalifikacji.
Porażka typu promocji
Jeśli obszar nazw ma już członek o tej samej nazwie członka moduł, promowanie typu jest pokonane dla tego członka modułu.Poniższy przykład pokazuje szkielet definicji wyliczenie i moduł w obrębie tej samej przestrzeni nazw.
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
W poprzednim przykładzie Visual Basic nie można podwyższyć poziomu klasy abc do thisNameSpace , ponieważ jest już wyliczenia o tej samej nazwie na poziomie obszaru nazw.Dostęp abcSub, musisz użyć ciągu kwalifikacji pełne thisNamespace.thisModule.abc.abcSub.Jednakże klasy xyz jest nadal promować i można uzyskać dostęp xyzSub z ciągiem krótszym kwalifikacji thisNamespace.xyz.xyzSub.
Porażka promocji typu dla typów częściowych
Jeśli używa się klasy lub struktury wewnątrz modułu Częściowe (Visual Basic) słowa kluczowego, promocji typu jest automatycznie pokonane dla danej klasy lub struktury, niezależnie od tego, czy przestrzeń nazw ma członek o tej samej nazwie.Inne elementy w module kwalifikują się nadal do typu promocji.
Konsekwencje. Porażka typu promocji definicji częściowej może spowodować nieoczekiwane wyniki, a nawet błędy kompilatora.Poniższy przykład pokazuje szkielet częściowe definicji klasy, z których jedna jest wewnątrz modułu.
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
W poprzednim przykładzie autora oczekiwać kompilatora, aby scalić dwie definicje częściowe sampleClass.Jednak kompilator nie należy rozważyć wspieranie dla definicji częściowej wewnątrz sampleModule.W wyniku próby skompilować dwa odrębne i niezależne klas, zarówno o nazwie sampleClass , ale z różnych kwalifikacji ścieżki.
Kompilator scalenia częściowe definicje tylko wtedy, gdy ich w pełni kwalifikowanych ścieżek są identyczne.
Zalecenia
Następujące zalecenia stanowią dobrą praktykę programistyczną.
Unikatowe nazwy. Jeśli masz pełną kontrolę nad nazewnictwem programowania elementów, zawsze jest dobrym pomysłem jest wszędzie używać unikatowych nazw.Identyczne nazwy wymagają dodatkowych kwalifikacji i może poprawić czytelność kodu trudniej odczytać.Również może prowadzić do powstawania błędów i nieoczekiwane wyniki.
Pełne kwalifikacje. Podczas pracy z modułami i innych elementów w tej samej przestrzeni nazw najbezpieczniejszy sposób podejścia jest zawsze używać pełnej kwalifikacji dla wszystkich elementów programowania.Jeśli pokonane dla członka moduł jest promocji typu i nie pełni zakwalifikowania tego członka, można przypadkowo uzyskać dostępu do różnych elementów programowania.
Zobacz też
Zadania
Jak: kontrolować zakres zmiennej (Visual Basic)