Dela via


Kapslade typer

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 kapslad typ är en typ som definierats inom omfånget för en annan typ, som kallas omslutningstyp. En kapslad typ har åtkomst till alla medlemmar av dess omslutningstyp. Den har till exempel åtkomst till privata fält som definierats i omslutningstypen och till skyddade fält som definierats i alla stigande fält av den omslutande typen.

I allmänhet bör kapslade typer användas sparsamt. Det finns flera orsaker till detta. Vissa utvecklare är inte helt bekanta med konceptet. Dessa utvecklare kan till exempel ha problem med syntaxen för att deklarera variabler av kapslade typer. Kapslade typer är också mycket nära kopplade till sina omslutande typer, och är därför inte lämpade för allmänna typer.

Kapslade typer passar bäst för att modellera implementeringsinformation om deras omslutande typer. Slutanvändaren bör sällan behöva deklarera variabler av en kapslad typ och bör nästan aldrig uttryckligen behöva instansiera kapslade typer. Uppräknaren för en samling kan till exempel vara en kapslad typ av samlingen. Uppräknare instansieras vanligtvis av sin omslutningstyp, och eftersom många språk stöder foreach-instruktionen behöver uppräkningsvariabler sällan deklareras av slutanvändaren.

✔️ Använd kapslade typer när relationen mellan den kapslade typen och dess yttre typ är sådan att semantik för medlemstillgänglighet är önskvärd.

❌ Använd INTE offentliga kapslade typer som en logisk grupperingskonstruktion. använd namnrymder för detta.

❌ UNDVIK offentligt exponerade kapslade typer. Det enda undantaget är om variabler av den kapslade typen endast behöver deklareras i sällsynta scenarier som underklassning eller andra avancerade anpassningsscenarier.

❌ Använd INTE kapslade typer om typen sannolikt kommer att refereras utanför den innehållande typen.

Ett uppräkning som skickas till en metod som definierats för en klass bör till exempel inte definieras som en kapslad typ i klassen.

❌ Använd INTE kapslade typer om de behöver instansieras av klientkod. Om en typ har en offentlig konstruktor bör den förmodligen inte kapslas.

Om en typ kan instansieras verkar det indikera att typen har en plats i ramverket på egen hand (du kan skapa den, arbeta med den och förstöra den utan att någonsin använda den yttre typen) och bör därför inte kapslas. Inre typer bör inte återanvändas i stor utsträckning utanför den yttre typen utan någon som helst relation till den yttre typen.

❌ Definiera INTE en kapslad typ som medlem i ett gränssnitt. Många språk stöder inte en sådan konstruktion.

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