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.
Elrejthet egy változót árnyékolással , vagyis egy azonos nevű változóval való újradefiniálásával. A elrejteni kívánt változó árnyékolása kétféleképpen lehetséges:
Árnyékolás a hatókörön keresztül. A hatókörön belül árnyékolhatja, ha újradefiniálja azt a régió alrégiójában, amely tartalmazza az elrejteni kívánt változót.
Árnyékolás az öröklésen keresztül. Ha az elrejteni kívánt változó osztályszinten van definiálva, akkor öröklés útján újradefiniálhatja azt egy származtatott osztályban a Shadows kulcsszó használatával.
A változók elrejtésének két módja
Változó elrejtése a hatókörön keresztüli árnyékolással
Határozza meg az elrejteni kívánt változót meghatározó régiót, és határozza meg azt a kisrégiót, amelyben újradefiniálhatja azt a változóval.
Változó régiója Újradefiniálható alrégió Modul Egy osztály a modulon belül Osztály Az osztályon belüli alosztály
Az osztályon belüli eljárásAz eljárásblokkokban nem lehet újradefiniálni egy eljárásváltozót, például egy ...
Ifszerkezetben vagy hurokban.End IfForHozza létre az alrégiót, ha még nem létezik.
Az alrégióban írjon egy dim utasítást , amely deklarálja az árnyékoló változót.
Ha az alrégión belüli kód a változó nevére hivatkozik, a fordító feloldja az árnyékoló változóra mutató hivatkozást.
Az alábbi példa a hatókörön keresztüli árnyékolást, valamint az árnyékolást megkerülő hivatkozást szemlélteti.
Module shadowByScope ' The following statement declares num as a module-level variable. Public num As Integer Sub show() ' The following statement declares num as a local variable. Dim num As Integer ' The following statement sets the value of the local variable. num = 2 ' The following statement displays the module-level variable. MsgBox(CStr(shadowByScope.num)) End Sub Sub useModuleLevelNum() ' The following statement sets the value of the module-level variable. num = 1 show() End Sub End ModuleAz előző példa a változót
nummodulszinten és eljárásszinten is deklarálja (az eljárásbanshow). A helyi változónumárnyékot ad a modulszintű változónaknumshow, így a helyi változó értéke 2. Azonban aznumnem árnyékolható helyi változóként auseModuleLevelNumeljárásban.useModuleLevelNumEzért a modulszintű változó értékét 1 értékre állítja.A
MsgBoxbelsőshowhívás a modul nevével való minősítéssel halad át az árnyékolásinummechanizmuson. Ezért a modulszintű változót jeleníti meg a helyi változó helyett.
Változó elrejtése az örökléssel való árnyékolással
Győződjön meg arról, hogy az elrejteni kívánt változó egy osztályban és osztályszinten van deklarálva (bármilyen eljáráson kívül). Ellenkező esetben nem tudja árnyékolni az öröklés révén.
Definiáljon egy osztályt, amely a változó osztályából származik, ha még nem létezik.
A származtatott osztályon belül írjon egy utasítást
Dim, amely deklarálja a változót. Adja meg az Árnyékok kulcsszót a deklarációban.Ha a származtatott osztály kódja a változó nevére hivatkozik, a fordító feloldja a változóra mutató hivatkozást.
Az alábbi példa az öröklés árnyékolását szemlélteti. Két hivatkozással rendelkezik, az egyik az árnyékolási változóhoz, a másik pedig az árnyékolást megkerülő.
Public Class shadowBaseClass Public shadowString As String = "This is the base class string." End Class Public Class shadowDerivedClass Inherits shadowBaseClass Public Shadows shadowString As String = "This is the derived class string." Public Sub showStrings() Dim s As String = "Unqualified shadowString: " & shadowString & vbCrLf & "MyBase.shadowString: " & MyBase.shadowString MsgBox(s) End Sub End ClassAz előző példa deklarálja a változót
shadowStringaz alaposztályban, és árnyékot ad a származtatott osztálynak. A származtatott osztály eljárásashowStringsakkor jeleníti meg a sztring árnyékolt verzióját, ha a névshadowStringnincs minősítve. Ezután megjeleníti az árnyékolt verziót, hashadowStringaMyBasekulcsszóval van minősítve.
Robusztus programozás
Az árnyékolás egy azonos nevű változó több verzióját is bevezeti. Ha egy kódutasítás a változó nevére hivatkozik, a kompiler által használt verzió olyan tényezőktől függ, mint a kódutasítás helye és a minősítő sztring jelenléte. Ez növelheti az árnyékolt változók nem tervezett verziójára való hivatkozás kockázatát. Ezt a kockázatot csökkentheti egy árnyékolt változóra mutató összes hivatkozás teljes minősítésével.