Dela via


Tätning

Kommentar

Det här innehållet skrivs om med behörighet från Pearson Education, Inc. från Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2nd Edition. Den utgåvan publicerades 2008, och boken har sedan dess reviderats helt i den tredje utgåvan. En del av informationen på den här sidan kan vara inaktuell.

En av funktionerna i objektorienterade ramverk är att utvecklare kan utöka och anpassa dem på sätt som inte kan förutses av ramverksdesigners. Detta är både kraften och faran med utökningsbar design. När du utformar ramverket är det därför mycket viktigt att noggrant utforma för utökningsbarhet när det är önskat och att begränsa utökningsbarheten när det är farligt.

En kraftfull mekanism som förhindrar utökningsbarhet är tätning. Du kan försegla antingen klassen eller enskilda medlemmar. Att försegla en klass hindrar användare från att ärva från klassen. Att försegla en medlem hindrar användare från att åsidosätta en viss medlem.

❌ Försegla INTE klasser utan att ha en bra anledning att göra det.

Att försegla en klass eftersom du inte kan tänka dig ett utökningsscenario är inte en bra anledning. Framework-användare gillar att ärva från klasser av olika icke-uppenbara skäl, till exempel att lägga till bekvämlighetsmedlemmar. Se Oförseglade klasser för exempel på icke-uppenbara orsaker till att användare vill ärva från en typ.

Här är några bra skäl för att försegla en klass:

  • Klassen är en statisk klass. Se Statisk klassdesign.

  • Klassen lagrar säkerhetskänsliga hemligheter i ärvda skyddade medlemmar.

  • Klassen ärver många virtuella medlemmar och kostnaden för att försegla dem individuellt skulle uppväga fördelarna med att lämna klassen oförseglade.

  • Klassen är ett attribut som kräver mycket snabb körningssökning. Förseglade attribut har något högre prestandanivåer än oförseglade. Se Attribut.

❌ Deklarera INTE skyddade eller virtuella medlemmar på förseglade typer.

Per definition kan inte förseglade typer ärvas från. Det innebär att skyddade medlemmar på förseglade typer inte kan anropas, och virtuella metoder för förseglade typer kan inte åsidosättas.

✔️ ÖVERVÄG att försegla medlemmar som du åsidosätter.

Problem som kan uppstå vid introduktionen av virtuella medlemmar (beskrivs i Virtuella medlemmar) gäller även för åsidosättningar, men i något mindre grad. Om du förseglar en åsidosättning skyddas du från dessa problem från och med den punkten i arvshierarkin.

Portioner © 2005, 2009 Microsoft Corporation. Med ensamrätt.

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, publicerad 22 okt 2008 av Addison-Wesley Professional som en del av Microsoft Windows Development Series.

Se även