Postupy: Skrytí zděděné proměnné (Visual Basic)
Odvozená třída dědí všechny definice své základní třídy. Chcete-li definovat proměnnou se stejným názvem jako prvek základní třídy, můžete skrýt nebo stín tento element základní třídy při definování proměnné v odvozené třídě. Pokud to uděláte, kód v odvozené třídě přistupuje k proměnné, pokud explicitně neprojde mechanismem stínování.
Dalším důvodem, proč byste mohli chtít skrýt zděděnou proměnnou, je chránit před revizí základní třídy. Základní třída může projít změnou prvku, který dědíte. Pokud k tomu dojde, Shadows
modifikátor vynutí odkazy z odvozené třídy, aby se přeložily na vaši proměnnou namísto elementu základní třídy.
Skrytí zděděné proměnné
Ujistěte se, že proměnná, kterou chcete skrýt, je deklarována na úrovni třídy (mimo jakoukoli proceduru). Jinak ho nemusíte skrýt.
Uvnitř odvozené třídy napište příkaz Dim deklarující proměnnou. Použijte stejný název jako zděděná proměnná.
Do deklarace zahrňte klíčové slovo Shadows.
Pokud kód v odvozené třídě odkazuje na název proměnné, kompilátor přeloží odkaz na vaši proměnnou.
Následující příklad znázorňuje stínování zděděné proměnné:
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 Class
Předchozí příklad deklaruje proměnnou
shadowString
v základní třídě a stínuje ji v odvozené třídě. ProceduraShowStrings
v odvozené třídě zobrazí stínovací verzi řetězce, pokud názevshadowString
není kvalifikovaný. Potom zobrazí stínovou verzi, pokudshadowString
je kvalifikována pomocí klíčovéhoMyBase
slova.
Robustní programování
Stínování zavádí více než jednu verzi proměnné se stejným názvem. Pokud příkaz kódu odkazuje na název proměnné, verze, na kterou kompilátor přeloží odkaz, závisí na faktorech, jako je umístění příkazu kódu a přítomnost opravňujícího řetězce. To může zvýšit riziko odkazování na nezamýšlenou verzi stínované proměnné. Toto riziko můžete snížit tak, že plně opravníte všechny odkazy na stínovanou proměnnou.