Condividi tramite


Progettazione del costruttore

Annotazioni

Questo contenuto viene ristampato con il permesso di Pearson Education, Inc. da Framework Design Guidelines: Conventions, Idioms e Pattern per Librerie .NET Riutilizzabili, 2a Edizione. Tale edizione è stata pubblicata nel 2008 e il libro è stato completamente rivisto nella terza edizione. Alcune informazioni in questa pagina potrebbero non essere aggiornate.

Esistono due tipi di costruttori: costruttori di tipi e costruttori di istanza.

I costruttori di tipo sono statici e vengono eseguiti da CLR prima che venga usato il tipo. I costruttori di istanza vengono eseguiti quando viene creata un'istanza di un tipo.

I costruttori di tipo non possono accettare alcun parametro. I costruttori di istanza possono. I costruttori di istanza che non accettano parametri sono spesso chiamati costruttori senza parametri.

I costruttori sono il modo più naturale per creare istanze di un tipo. La maggior parte degli sviluppatori cercherà e tenterà di usare un costruttore prima di prendere in considerazione modi alternativi per la creazione di istanze, ad esempio i metodi factory.

✔️ VALUTARE la possibilità di fornire costruttori semplici, idealmente predefiniti.

Un costruttore semplice ha un numero molto ridotto di parametri e tutti i parametri sono primitive o enumerazioni. Tali costruttori semplici aumentano l'usabilità del framework.

✔️ PRENDERE IN CONSIDERAZIONE l'uso di un metodo factory statico anziché di un costruttore se la semantica dell'operazione desiderata non si traduce direttamente nella costruzione di una nuova istanza, o se seguire le linee guida di progettazione del costruttore risulta innaturale.

✔️ Usare i parametri del costruttore come tasti di scelta rapida per impostare le proprietà principali.

Non deve esserci alcuna differenza nella semantica tra l'uso del costruttore vuoto seguito da alcuni set di proprietà e l'uso di un costruttore con più argomenti.

✔️ DO usa lo stesso nome per i parametri del costruttore e una proprietà se i parametri del costruttore vengono usati per impostare semplicemente la proprietà .

L'unica differenza tra tali parametri e le proprietà dovrebbe essere l'uso delle maiuscole e minuscole.

✔️ Eseguire operazioni minime nel costruttore.

I costruttori non devono eseguire molte operazioni diverse dall'acquisizione dei parametri del costruttore. Il costo di qualsiasi altra elaborazione deve essere ritardato fino a quando necessario.

✔️ DO genera eccezioni dai costruttori di istanza, se appropriato.

✔️ DO dichiara in modo esplicito il costruttore pubblico senza parametri nelle classi, se tale costruttore è obbligatorio.

Se non si dichiarano in modo esplicito costruttori in un tipo, molti linguaggi, ad esempio C#, aggiungeranno automaticamente un costruttore pubblico senza parametri. Le classi astratte ottengono un costruttore protetto.

L'aggiunta di un costruttore con parametri a una classe impedisce al compilatore di aggiungere il costruttore senza parametri. Questo spesso causa modifiche significative accidentali.

❌ EVITARE di definire in modo esplicito costruttori senza parametri in struct.

In questo modo la creazione di matrici risulta più veloce, perché se il costruttore senza parametri non è definito, non deve essere eseguito in ogni slot della matrice. Si noti che molti compilatori, tra cui C#, non consentono agli struct di avere costruttori senza parametri per questo motivo.

❌ EVITARE di chiamare membri virtuali in un oggetto all'interno del relativo costruttore.

La chiamata a un membro virtuale attiverà l'override più derivato, anche se il costruttore del tipo più derivato non è stato ancora completamente eseguito.

Linee guida per tipo costruttore

✔️ Fare in modo che i costruttori statici siano privati.

Un costruttore statico, detto anche costruttore di classe, viene usato per inizializzare un tipo. CLR chiama il costruttore statico prima che venga creata la prima istanza del tipo o vengano chiamati membri statici su tale tipo. L'utente non ha alcun controllo su quando viene chiamato il costruttore statico. Se un costruttore statico non è privato, può essere chiamato dal codice diverso da CLR. A seconda delle operazioni eseguite nel costruttore, questo può causare un comportamento imprevisto. Il compilatore C# impone che i costruttori statici siano privati.

❌ NON lanciare eccezioni dai costruttori statici.

Se viene generata un'eccezione da un costruttore di tipo, il tipo non è utilizzabile nel dominio applicazione corrente.

✔️ PRENDERE IN CONSIDERAZIONE l'inizializzazione di campi statici inline anziché l'uso esplicito di costruttori statici, perché il runtime è in grado di ottimizzare le prestazioni dei tipi che non dispongono di un costruttore statico definito in modo esplicito.

© Porzioni 2005, 2009 Microsoft Corporation. Tutti i diritti riservati.

Ristampato dall'autorizzazione di Pearson Education, Inc. da Framework Design Guidelines: Conventions, Idioms e Patterns for Reusable .NET Libraries, 2nd Edition di Krzysztof Cwalina e Brad Abrams, pubblicato il 22 ottobre 2008 da Addison-Wesley Professional come parte della Serie di sviluppo di Microsoft Windows.

Vedere anche