Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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.
In questa sezione vengono descritte le eccezioni standard fornite dal framework e i dettagli dell'utilizzo. L'elenco non è esaustivo. Per l'utilizzo di altri tipi di eccezioni del Framework, consultare la documentazione di riferimento del .NET Framework.
Eccezione e SystemException
❌ DO NOT throw System.Exception o System.SystemException.
❌ NON intercettare System.Exception o System.SystemException nel codice del framework, a meno che non si intenda rilanciare.
❌ EVITARE di intercettare System.Exception o System.SystemException, ad eccezione dei gestori di eccezioni di primo livello.
ApplicationException
❌ NON gettare o derivare da ApplicationException.
Eccezione di operazione non valida (InvalidOperationException)
✔️ GENERARE un'eccezione InvalidOperationException se l'oggetto si trova in uno stato non appropriato.
ArgumentException, ArgumentNullException e ArgumentOutOfRangeException
✔️ LANCIARE ArgumentException o uno dei suoi sottotipi se vengono passati argomenti non validi a un membro. Preferisce il tipo di eccezione più derivato, se applicabile.
✔️ IMPOSTA la proprietà ParamName quando si lancia una delle sottoclassi di ArgumentException.
Questa proprietà rappresenta il nome del parametro che ha causato la generazione dell'eccezione. Si noti che la proprietà può essere definita usando uno degli overload del costruttore.
✔️ DO utilizzare value per il nome del parametro di valore implicito dei setter di proprietà.
NullReferenceException, IndexOutOfRangeException e AccessViolationException
❌ NON consentire che le API chiamabili pubblicamente generino in modo esplicito o implicito NullReferenceException, AccessViolationException o IndexOutOfRangeException. Queste eccezioni sono riservate e generate dal motore di esecuzione e nella maggior parte dei casi indicano un bug.
Verificare gli argomenti per evitare di lanciare queste eccezioni. Lanciare queste eccezioni espone i dettagli di implementazione del metodo che potrebbero cambiare nel tempo.
StackOverflowException
❌ NON generare StackOverflowExceptionin modo esplicito . L'eccezione deve essere generata in modo esplicito solo dal CLR.
❌ NON intercettare StackOverflowException.
È quasi impossibile scrivere codice gestito che rimane coerente in presenza di overflow arbitrari dello stack. Le parti non gestite del CLR rimangono coerenti usando sonde per spostare gli overflow dello stack in posizioni ben definite anziché ritirarsi dagli overflow arbitrari dello stack.
OutOfMemoryException
❌ NON generare OutOfMemoryExceptionin modo esplicito . Questa eccezione deve essere generata solo dall'infrastruttura CLR.
ComException, SEHException e ExecutionEngineException
❌ NON lanciare esplicitamente COMException, ExecutionEngineException e SEHException. Queste eccezioni devono essere generate solo dall'infrastruttura CLR.
© 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.