Rilevazione e generazione di tipi di eccezioni standard
Nelle seguenti linee guida vengono descritte le procedure consigliate per alcune delle eccezioni più comuni disponibili in .NET Framework.
Exception e SystemException
Non generare System.Exception o System.SystemException.
Non rilevare System.Exception o System.SystemException nel codice del framework, a meno che non si intenda rigenerare l'eccezione.
Evitare di rilevare System.Exception o System.SystemException, tranne nei gestori eccezioni di primo livello.
ApplicationException
Dedurre le eccezioni personalizzate dalla classe T:System.Exception anziché dalla classe T:System.ApplicationException.
L'idea iniziale di far derivare le eccezioni personalizzate dalla classe ApplicationException non ha prodotto alcun valore significativo in termini pratici. Per ulteriori informazioni, vedere Suggerimenti per gestire le eccezioni.
InvalidOperationException
Generare un'eccezione System.InvalidOperationException se si verifica uno stato inappropriato. System.InvalidOperationException deve essere generata se un insieme di proprietà o una chiamata di metodo non risulta appropriata rispetto allo stato corrente dell'oggetto. La scrittura su un oggetto System.IO.FileStream che è stato aperto in lettura ad esempio deve generare un'eccezione System.InvalidOperationException.
Questa eccezione deve essere generata anche quando lo stato combinato di un insieme di oggetti correlati non è valido per l'operazione.
ArgumentException, ArgumentNullException e ArgumentOutOfRangeException
Generare l'eccezione System.ArgumentException o uno dei relativi sottotipi se a un membro vengono passati argomenti non corretti. Preferire il tipo di eccezione maggiormente derivato, se possibile.
Nel codice riportato di seguito viene illustrato un esempio di generazione di un'eccezione quando un argomento è null (Nothing in Visual Basic).
If (anObject = Nothing) Then
Throw New ArgumentNullException("anObject", "Specify a non-null argument.")
End If
if (anObject == null)
{
throw new ArgumentNullException("anObject",
"Specify a non-null argument.");
}
if (anObject == nullptr)
{
throw gcnew ArgumentNullException("anObject",
"Specify a non-null argument.");
}
Quando si genera l'eccezione System.ArgumentException o uno dei relativi tipi derivati, impostare la proprietà System.ArgumentException.ParamName. In questa proprietà è definito il nome del parametro che ha causato la generazione dell'eccezione. La proprietà può essere impostata utilizzando uno degli overload del costruttore.
Utilizzare value per il nome del parametro di valore implicito dei metodi per l'impostazione della proprietà.
Nell'esempio di codice riportato di seguito viene illustrata una proprietà che genera un'eccezione se viene passato un argomento null al chiamante.
Public Property Address() As IPAddress
Get
Return IPaddr
End Get
Set(ByVal value As IPAddress)
If IsNothing(value) Then
Throw New ArgumentNullException("value")
End If
IPaddr = value
End Set
End Property
public IPAddress Address
{
get
{
return address;
}
set
{
if(value == null)
{
throw new ArgumentNullException("value");
}
address = value;
}
}
property IPAddress^ Address
{
IPAddress^ get()
{
return address;
}
void set(IPAddress^ value)
{
if (value == nullptr)
{
throw gcnew ArgumentNullException("value");
}
address = value;
}
}
Non consentire ad API che possono essere chiamate pubblicamente di generare in modo esplicito o implicito le eccezioni System.NullReferenceException, System.AccessViolationException, System.InvalidCastException o System.IndexOutOfRangeException. Eseguire la verifica degli argomenti per evitare che vengano generate queste eccezioni. La generazione di queste eccezioni determina l'esposizione dei dettagli di implementazione del metodo, che sono soggetti a variazioni nel tempo.
StackOverflowException
Non generare in modo esplicito System.StackOverflowException. Questa eccezione deve essere generata in modo esplicito esclusivamente da Common Language Runtime.
Non rilevare System.StackOverflowException.
È estremamente difficile gestire a livello di codice un overflow dello stack. Si consiglia di consentire questa eccezione per terminare il processo e utilizzare il debug per determinare l'origine del problema.
OutOfMemoryException
Non generare in modo esplicito System.OutOfMemoryException. Questa eccezione deve essere generata solo dall'infrastruttura CLR.
ComException e SEHException
Non generare in modo esplicito System.Runtime.InteropServices.COMException o System.Runtime.InteropServices.SEHException. Queste eccezioni devono essere generate solo dall'infrastruttura CLR.
Non rilevare System.Runtime.InteropServices.SEHException in modo esplicito.
ExecutionEngineException
Non generare System.ExecutionEngineException in modo esplicito.
Portions Copyright 2005 Microsoft Corporation. Tutti i diritti riservati.
Portions Copyright Addison-Wesley Corporation. Tutti i diritti riservati.
Per ulteriori informazioni sulle linee guida di progettazione, vedere “le linee guida di progettazione di Framework: Idiomi convenzioni, e modelli per libro raccolte riutilizzabili .NET„ di Krzysztof Cwalina e brad Abrams, emessi da Addison-Wesley, 2005.
Vedere anche
Concetti
Scelta del tipo corretto di eccezione da generare
Altre risorse
Linee guida di progettazione per lo sviluppo di librerie di classi