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.
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é.