Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Anmärkning
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.
Det finns två typer av konstruktorer: typkonstruktorer och instanskonstruktorer.
Typkonstruktorer är statiska och körs av CLR innan typen används. Instanskonstruktorer körs när en instans av en typ skapas.
Typkonstruktorer kan inte ta några parametrar. Instanskonstruktorer kan. Instanskonstruktorer som inte tar några parametrar kallas ofta för parameterlösa konstruktorer.
Konstruktorer är det mest naturliga sättet att skapa instanser av en typ. De flesta utvecklare söker efter och försöker använda en konstruktor innan de överväger alternativa sätt att skapa instanser (till exempel fabriksmetoder).
✔️ ÖVERVÄG att erbjuda enkla, helst standardkonstruktorer.
En enkel konstruktor har ett mycket litet antal parametrar och alla parametrar är primitiver eller uppräkningar. Sådana enkla konstruktorer ökar ramverkets användbarhet.
✔️ ÖVERVÄG att använda en statisk fabriksmetod istället för en konstruktor om semantiken för den önskade åtgärden inte direkt motsvarar skapandet av en ny instans, eller om det känns onaturligt att följa konstruktorns designprinciper.
✔️ Använd konstruktorparametrar som genvägar för att ange huvudegenskaper.
Det bör inte finnas någon skillnad i semantik mellan att använda den tomma konstruktorn följt av vissa egenskapsuppsättningar och att använda en konstruktor med flera argument.
✔️ Använd samma namn för konstruktorparametrar och en egenskap om konstruktorparametrarna används för att helt enkelt ange egenskapen.
Den enda skillnaden mellan sådana parametrar och egenskaperna bör vara hölje.
✔️ Utför minimalt arbete i konstruktorn.
Konstruktorer bör inte utföra mycket annat arbete än att avbilda konstruktorparametrarna. Kostnaden för annan bearbetning bör fördröjas tills det krävs.
✔️ Utlös undantag från instanskonstruktorer, om det är lämpligt.
✔️ Deklarera uttryckligen den offentliga parameterlösa konstruktorn i klasser, om en sådan konstruktor krävs.
Om du inte uttryckligen deklarerar några konstruktorer för en typ lägger många språk (till exempel C#) automatiskt till en offentlig parameterlös konstruktor. (Abstrakta klasser har en skyddad konstruktor.)
Om du lägger till en parameteriserad konstruktor i en klass förhindrar det att kompilatorn lägger till den parameterlösa konstruktorn. Detta orsakar ofta oavsiktliga kompatibilitetsproblem.
❌ UNDVIK att explicit definiera parameterlösa konstruktorer på structs.
Detta gör att matrisen skapas snabbare, för om den parameterlösa konstruktorn inte har definierats behöver den inte köras på varje plats i matrisen. Observera att många kompilatorer, inklusive C#, inte tillåter att structs har parameterlösa konstruktorer av den anledningen.
❌ UNDVIK att anropa virtuella medlemmar på ett objekt i konstruktorn.
Om du anropar en virtuell medlem kommer den mest härledda metodåtergivningen att anropas, även om konstruktorn av den härledda typen inte har körts helt ännu.
Riktlinjer för typkonstruktor
✔️ Gör statiska konstruktorer privata.
En statisk konstruktor, även kallad klasskonstruktor, används för att initiera en typ. CLR anropar den statiska konstruktorn innan den första instansen av typen skapas eller några statiska medlemmar på den typen anropas. Användaren har ingen kontroll över när den statiska konstruktorn anropas. Om en statisk konstruktor inte är privat kan den anropas med annan kod än CLR. Beroende på vilka åtgärder som utförs i konstruktorn kan detta orsaka oväntat beteende. C#-kompilatorn tvingar statiska konstruktorer att vara privata.
❌ Utlöser INTE undantag från statiska konstruktorer.
Om ett undantag utlöses från en typkonstruktor kan typen inte användas i den aktuella programdomänen.
✔️ ÖVERVÄG att initiera statiska fält direkt i stället för att uttryckligen använda statiska konstruktorer, eftersom körmiljön kan optimera prestanda för typer som inte har en explicit definierad statisk konstruktor.
Portioner © 2005, 2009 Microsoft Corporation. Alla rättigheter reserverade.
Återtryckt med tillstånd från Pearson Education, Inc. från Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2nd Edition av Krzysztof Cwalina och Brad Abrams, publicerades den 22 oktober 2008 av Addison-Wesley Professional som en del av Microsoft Windows Development Series.