Zapečetění
Poznámka:
Tento obsah je znovu vytištěn oprávněním Pearson Education, Inc. z Framework Design Guidelines: Conventions, Idioms a Patterns for Reusable .NET Libraries, 2. vydání. Tato edice byla publikována v roce 2008 a kniha byla od té doby plně upravena ve třetím vydání. Některé informace na této stránce můžou být zastaralé.
Jednou z funkcí objektově orientovaných architektur je, že vývojáři je mohou rozšířit a přizpůsobit způsoby, které návrháři architektury neočekáovali. To je výkon i nebezpečí rozšiřitelného návrhu. Při návrhu architektury je proto velmi důležité pečlivě navrhnout rozšiřitelnost, pokud je to žádoucí, a omezit rozšiřitelnost, pokud je nebezpečná.
Výkonný mechanismus, který brání rozšiřitelnosti, je těsnicí. Můžete zapečetit třídu nebo jednotlivé členy. Zapečetění třídy brání uživatelům v dědění ze třídy. Zapečetění člena brání uživatelům v přepsání konkrétního člena.
❌ NEZApečetějte třídy bez dobrého důvodu k tomu.
Zapečetění třídy, protože si nemůžete představit scénář rozšiřitelnosti, není dobrým důvodem. Uživatelé architektury chtějí dědit z tříd z různých nejevných důvodů, jako je přidání členů pohodlí. Příklady nezapečetěných tříd najdete v příkladech nezjevných důvodů, proč uživatelé chtějí dědit z typu.
Mezi dobré důvody pro zapečetění třídy patří:
Třída je statická třída. Viz Návrh statické třídy.
Třída ukládá tajné kódy citlivé na zabezpečení do zděděných chráněných členů.
Třída dědí mnoho virtuálních členů a náklady na jejich zapečetění jednotlivě by převažovaly nad výhodami opuštění třídy nezapečetěné.
Třída je atribut, který vyžaduje velmi rychlé vyhledávání modulu runtime. Zapečetěné atributy mají mírně vyšší úrovně výkonu než nezapečetěné atributy. Viz atributy.
❌ DO NOT deklarujte chráněné nebo virtuální členy u zapečetěných typů.
Podle definice nelze zapečetěné typy dědit z. To znamená, že chráněné členy u zapečetěných typů nelze volat a virtuální metody u zapečetěných typů nelze přepsat.
✔️ ZVAŽTE zapečetění členů, které přepíšete.
Problémy, které můžou mít za následek zavedení virtuálních členů (probírané ve virtuálních členech), platí i pro přepsání, i když do mírně menší míry. Zapečetění přepsání chrání před těmito problémy počínaje tímto bodem v hierarchii dědičnosti.
© Části 2005, 2009 Microsoft Corporation. Všechna práva vyhrazena.
Reprinted by permission of Pearson Education, Inc. from Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2nd Edition by Krzysztof Cwalina and Brad Abrams, published Oct 22, 2008 by Addison-Wesley Professional v rámci Microsoft Windows Development Series.