Progettazione di costruttori
Nota
Questo contenuto viene ristampato con l'autorizzazione di Pearson Education, Inc. da Framework Design Guidelines: Conventions, Idiomsn and Patterns for Reusable .NET Libraries, 2nd Edition. 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 parametri. I costruttori di istanza possono accettarli. 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 tenterà di usare un costruttore prima di prendere in considerazione modi alternativi per la creazione di istanze, ad esempio i metodi factory.
✔️ PRENDERE IN CONSIDERAZIONE la possibilità di fornire costruttori semplici, idealmente predefiniti.
Un costruttore semplice ha un numero molto ridotto di parametri e tutti i parametri sono primitivi 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 viene mappata direttamente alla costruzione di una nuova istanza o se le linee guida di progettazione del costruttore non sembrano corrette.
✔️ 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.
✔️ USARE 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à deve essere la combinazione di 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 posticipato fino a quando necessario.
✔️ Generare eccezioni dai costruttori di istanza, se appropriato.
✔️ DICHIARARE 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 causa spesso modifiche accidentali che causano interruzioni.
❌ 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 causerà la chiamata dell'override più derivato, anche se il costruttore del tipo più derivato non è ancora stato eseguito completamente.
Linee guida per i costruttori di tipi
✔️ RENDERE privati i costruttori statici.
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 da codice diverso da CLR. A seconda delle operazioni eseguite nel costruttore, questa situazione può causare comportamenti imprevisti. Il compilatore C# impone che i costruttori statici siano privati.
❌ NON generare 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.
Parti protette da copyright © 2005, 2009 Microsoft Corporation. Tutti i diritti sono riservati.
Ristampato con l'autorizzazione di Pearson Education, Inc. da Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2a edizione di Krzysztof Cwalina and Brad Abrams, pubblicato il 22 ottobre 2008 da Addison-Wesley Professional nella collana Microsoft Windows Development Series.