Sdílet prostřednictvím


Rozdíly mezi stínováním a přepsáním (Visual Basic)

Když definujete třídu, která dědí ze základní třídy, někdy chcete předefinovat jeden nebo více elementů základní třídy v odvozené třídě. Stínování a přepsání jsou k dispozici pro tento účel.

Porovnání

Stínování a přepsání se používají, když odvozená třída dědí ze základní třídy a oba předefinují jeden deklarovaný prvek s jiným. Mezi těmito dvěma ale existují významné rozdíly.

Následující tabulka porovnává stínování s přepsáním.

Bod porovnání Stínování Přepsání
Účel Chrání před následnou úpravou základní třídy, která zavádí člena, který jste již definovali ve své odvozené třídě. Dosahuje polymorfismu definováním jiné implementace procedury nebo vlastnosti se stejnou volající sekvencí1.
Redefined – element Libovolný deklarovaný typ elementu Pouze procedura (Function, Subnebo ) nebo Operatorvlastnost
Redefining – element Libovolný deklarovaný typ elementu Pouze procedura nebo vlastnost s identickou volající sekvencí1
Úroveň přístupu prvku redefining Libovolná úroveň přístupu Úroveň přístupu přepsaného elementu nejde změnit.
Čitelnost a zapisovatelnost prvku redefining Libovolná kombinace Nelze změnit čitelnost nebo zapisovatelnost přepisované vlastnosti.
Řízení předefinováním Element základní třídy nemůže vynutit ani zakázat stínování Element základní třídy může určit MustOverride, NotOverridablenebo Overridable
Použití klíčových slov Shadowsdoporučená v odvozené třídě; Shadows předpokládá se, že není-li Shadows zadánaani Overrides 2 Overridable nebo MustOverride povinné v základní třídě; Overrides povinné v odvozené třídě
Dědičnost prvku redefining podle tříd odvozených z vaší odvozené třídy Shadowing element zděděný dalšími odvozenými třídami; stínovaný prvek stále skrytý3 Přepsání elementu zděděného dalšími odvozenými třídami; přepsaný element stále přepsaný

1 Volající sekvence se skládá z typu prvku (Function, Sub, Operator, nebo Property), name, seznam parametrů a návratový typ. Proceduru nelze přepsat vlastností ani naopak. Nelze přepsat jeden druh procedury (Function, Subnebo Operator) jiným druhem.

2 Pokud neurčíte ani ShadowsOverrides, kompilátor vydá zprávu upozornění, která vám pomůže zjistit, jaký druh redefinition chcete použít. Pokud upozornění ignorujete, použije se mechanismus stínování.

3 Pokud je prvek stínování nepřístupný v další odvozené třídě, stínování není zděděno. Pokud například deklarujete stínovací prvek jako Private, třída odvozená z odvozené třídy dědí původní prvek místo stínování elementu.

Pokyny

Přepsání obvykle používáte v následujících případech:

  • Definujete polymorfní odvozené třídy.

  • Chcete zajistit, aby kompilátor vynucoval identický typ elementu a posloupnost volání.

Stínování obvykle používáte v následujících případech:

  • Předpokládáte, že se základní třída může upravit a definovat prvek se stejným názvem jako vy.

  • Chcete svobodu změnit typ prvku nebo posloupnost volání.

Viz také