Megosztás a következőn keresztül:


Az árnyékolás és a felülírás közötti különbségek (Visual Basic)

Ha egy alaposztálytól öröklő osztályt határoz meg, néha érdemes újradefiniolni a származtatott osztály egy vagy több alaposztály-elemét. Erre a célra az árnyékolás és a felülredírozás is elérhető.

Összehasonlítás

Az árnyékolás és a felülredírozás akkor is használatos, ha egy származtatott osztály örököl egy alaposztályt, és mindkettő újradefiniálja az egyik deklarált elemet egy másikkal. A kettő között azonban jelentős különbségek vannak.

Az alábbi táblázat összehasonlítja az árnyékolást a felülírással.

Összehasonlítási pont Árnyék Felülírása
Cél Védelmet nyújt egy későbbi alaposztály-módosítással szemben, amely bevezet egy tagot, amelyet már definiált a származtatott osztályban A polimorfizmust úgy éri el, hogy egy eljárás vagy tulajdonság eltérő implementációját definiálja ugyanazzal ahívási sorozattal 1
Újradefiniált elem Bármely deklarált elemtípus Csak eljárás (Function, Subvagy Operator) vagy tulajdonság
Elem újradefiniálása Bármely deklarált elemtípus Csak olyan eljárás vagy tulajdonság, amelynek1. hívássorozata azonos
Az újradefiniálási elem hozzáférési szintje Bármely hozzáférési szint A felülírt elem hozzáférési szintje nem módosítható
Az újradefiniáló elem olvashatósága és írhatósága Bármilyen kombináció A felülírt tulajdonság olvashatósága vagy írhatósága nem módosítható
Az újradefiniálás szabályozása Az alaposztályelem nem kényszeríthet vagy tilthat árnyékolást Az alaposztályelem megadhatja MustOverride, NotOverridablevagy Overridable
Kulcsszóhasználat Shadows származtatott osztályban ajánlott; Shadows feltételezhető, ha sem a Shadows, sem a Overrides meg van adva2. Overridable vagy MustOverride alaposztályban kötelező; Overrides származtatott osztályban kötelező
Az újradefiniálási elem öröklése a származtatott osztályból származó osztályok szerint További származtatott osztályok által örökölt árnyékoló elem; árnyékolt elem még mindig rejtett3 A később származtatott osztályok által örökölt felülíró elem; a felülírt elem továbbra is felül van bírálva

1 A hívássorozat az elemtípusból (Function, , Subvagy OperatorProperty), névből, paraméterlistából és visszatérési típusból áll. Nem bírálhat felül egy eljárást egy tulajdonsággal, vagy fordítva. Nem bírálhat felül egy eljárást (FunctionSubvagy Operator) egy másik típussal.

2 Ha egyiket Shadows sem adja meg, vagy Overridesa fordító egy figyelmeztető üzenetet ad ki, amely segít eldönteni, hogy milyen típusú újradefiniálást szeretne használni. Ha figyelmen kívül hagyja a figyelmeztetést, a rendszer az árnyékolási mechanizmust használja.

3 Ha az árnyékoló elem nem érhető el egy további származtatott osztályban, az árnyékolás nem öröklődik. Ha például árnyékoló elemet Privatedeklarál, akkor a származtatott osztályból származó osztály az árnyékoló elem helyett az eredeti elemet örökli.

Iránymutatások

Általában a felülbírálást a következő esetekben használja:

  • Polimorf eredetű osztályokat definiál.

  • Azt szeretné, hogy a fordító kényszerítse ki az azonos elemtípust és a hívási sorrendet.

Az árnyékolást általában a következő esetekben használja:

  • Ön arra számít, hogy az alaposztály módosulhat, és meghatározhat egy elemet, amely ugyanolyan nevet visel, mint az öné.

  • Az elemtípus vagy a hívássorozat módosításának szabadságát szeretné.

Lásd még