Constructorontwerp
Notitie
Deze inhoud wordt opnieuw afgedrukt door toestemming van Pearson Education, Inc. van Framework Design Guidelines: Conventions, Idioms en Patterns for Reusable .NET Libraries, 2nd Edition. Die editie werd in 2008 gepubliceerd en het boek is sindsdien volledig herzien in de derde editie. Sommige informatie op deze pagina is mogelijk verouderd.
Er zijn twee soorten constructors: typeconstructors en instantieconstructors.
Typeconstructors zijn statisch en worden uitgevoerd door de CLR voordat het type wordt gebruikt. Exemplaarconstructors worden uitgevoerd wanneer een exemplaar van een type wordt gemaakt.
Typeconstructors kunnen geen parameters gebruiken. Exemplaarconstructors kunnen. Exemplaarconstructors die geen parameters gebruiken, worden vaak parameterloze constructors genoemd.
Constructors zijn de meest natuurlijke manier om exemplaren van een type te maken. De meeste ontwikkelaars zoeken en proberen een constructor te gebruiken voordat ze alternatieve manieren overwegen om exemplaren te maken (zoals factory-methoden).
✔️ OVERWEEG om eenvoudige, idealiter standaardconstructors te bieden.
Een eenvoudige constructor heeft een zeer klein aantal parameters en alle parameters zijn primitieven of opsommingen. Dergelijke eenvoudige constructors vergroten de bruikbaarheid van het framework.
✔️ OVERWEEG om een statische factory-methode te gebruiken in plaats van een constructor als de semantiek van de gewenste bewerking niet rechtstreeks wordt toegewezen aan de constructie van een nieuw exemplaar, of als het volgen van de ontwerprichtlijnen van de constructor onnatuurlijk voelt.
✔️ GEBRUIK constructorparameters als sneltoetsen voor het instellen van de hoofdeigenschappen.
Er mag geen verschil zijn in semantiek tussen het gebruik van de lege constructor gevolgd door een aantal eigenschappensets en het gebruik van een constructor met meerdere argumenten.
✔️ GEBRUIK dezelfde naam voor constructorparameters en een eigenschap als de constructorparameters worden gebruikt om de eigenschap in te stellen.
Het enige verschil tussen dergelijke parameters en de eigenschappen moet een behuizing zijn.
✔️ DOE minimaal werk in de constructor.
Constructors mogen niet veel meer doen dan het vastleggen van de constructorparameters. De kosten van elke andere verwerking moeten worden uitgesteld totdat dit nodig is.
✔️ GOOI uitzonderingen van exemplaarconstructors, indien van toepassing.
✔️ DECLAREER de openbare parameterloze constructor expliciet in klassen als een dergelijke constructor vereist is.
Als u geen constructors expliciet declareert voor een type, worden in veel talen (zoals C#) automatisch een openbare constructor zonder parameter toegevoegd. (Abstract-klassen krijgen een beveiligde constructor.)
Als u een geparameteriseerde constructor toevoegt aan een klasse, voorkomt u dat de compiler de parameterloze constructor toevoegt. Dit veroorzaakt vaak onbedoelde wijzigingen die fouten veroorzaken.
❌ VERMIJD expliciet parameterloze constructors op structs te definiëren.
Dit maakt het maken van een matrix sneller, omdat als de constructor zonder parameters niet is gedefinieerd, deze niet hoeft te worden uitgevoerd op elke sleuf in de matrix. Houd er rekening mee dat veel compilers, waaronder C#, om deze reden niet toestaan dat structs parameterloze constructors hebben.
❌ VERMIJD het aanroepen van virtuele leden op een object in de constructor.
Als u een virtueel lid aanroept, wordt de meest afgeleide overschrijving aangeroepen, zelfs als de constructor van het meest afgeleide type nog niet volledig is uitgevoerd.
Richtlijnen voor typeconstructor
✔️ MAAK statische constructors privé.
Een statische constructor, ook wel een klasseconstructor genoemd, wordt gebruikt om een type te initialiseren. De CLR roept de statische constructor aan voordat het eerste exemplaar van het type wordt gemaakt of statische leden van dat type worden aangeroepen. De gebruiker heeft geen controle over wanneer de statische constructor wordt aangeroepen. Als een statische constructor niet privé is, kan deze worden aangeroepen met andere code dan de CLR. Afhankelijk van de bewerkingen die in de constructor worden uitgevoerd, kan dit onverwacht gedrag veroorzaken. De C#-compiler dwingt statische constructors privé te zijn.
❌ GOOI GEEN uitzonderingen van statische constructors.
Als er een uitzondering wordt gegenereerd vanuit een typeconstructor, is het type niet bruikbaar in het huidige toepassingsdomein.
✔️ OVERWEEG statische velden inline te initialiseren in plaats van expliciet statische constructors te gebruiken, omdat de runtime de prestaties kan optimaliseren van typen die geen expliciet gedefinieerde statische constructor hebben.
© Delen 2005, 2009 Microsoft Corporation. Alle rechten voorbehouden.
Herdrukt door toestemming van Pearson Education, Inc. van 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 als onderdeel van de Microsoft Windows Development Series.