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.
Proprietà | valore |
---|---|
ID regola | CA1064 |
Title | Le eccezioni devono essere pubbliche |
Categoria | Progettazione |
La correzione causa un'interruzione o meno | Non causa un'interruzione |
Abilitato per impostazione predefinita in .NET 9 | No |
Un'eccezione non pubblica deriva direttamente da Exception, SystemExceptiono ApplicationException.
Un'eccezione interna è visibile solo all'interno del proprio ambito interno. Se l'eccezione si verifica al di fuori dell'ambito interno, può essere rilevata solo tramite l'eccezione di base. Se l'eccezione interna viene ereditata da Exception, SystemExceptiono ApplicationException, il codice esterno non avrà informazioni sufficienti per sapere cosa fare con l'eccezione.
Tuttavia, se il codice presenta un'eccezione pubblica che verrà usata successivamente come base per un'eccezione interna, è ragionevole presupporre che il codice possa eseguire un'operazione intelligente con l'eccezione di base. L'eccezione pubblica avrà più informazioni di quelle fornite da Exception, SystemExceptiono ApplicationException.
Rendere pubblica l'eccezione o derivare l'eccezione interna da un'eccezione pubblica che non Exceptionè , SystemExceptiono ApplicationException.
Eliminare un messaggio da questa regola se si è certi che in tutti i casi l'eccezione privata verrà intercettata all'interno del proprio ambito interno.
Se si vuole eliminare una singola violazione, aggiungere direttive del preprocessore al file di origine per disabilitare e quindi riabilitare la regola.
#pragma warning disable CA1064
// The code that's violating the rule is on this line.
#pragma warning restore CA1064
Per disabilitare la regola per un file, una cartella o un progetto, impostarne la gravità none
su nel file di configurazione.
[*.{cs,vb}]
dotnet_diagnostic.CA1064.severity = none
Per altre informazioni, vedere Come eliminare gli avvisi di analisi del codice.
Questa regola viene attivata nel primo metodo di esempio FirstCustomException perché la classe di eccezione deriva direttamente da Exception ed è interna. La regola non viene attivata sulla classe SecondCustomException perché anche se la classe deriva direttamente da Exception, la classe viene dichiarata pubblica. La terza classe non genera anche la regola perché non deriva direttamente da System.Exception, System.SystemExceptiono System.ApplicationException.
// Violates this rule
[Serializable]
internal class FirstCustomException : Exception
{
internal FirstCustomException()
{
}
internal FirstCustomException(string message)
: base(message)
{
}
internal FirstCustomException(string message, Exception innerException)
: base(message, innerException)
{
}
protected FirstCustomException(SerializationInfo info, StreamingContext context)
: base(info, context)
{
}
}
// Does not violate this rule because
// SecondCustomException is public
[Serializable]
public class SecondCustomException : Exception
{
public SecondCustomException()
{
}
public SecondCustomException(string message)
: base(message)
{
}
public SecondCustomException(string message, Exception innerException)
: base(message, innerException)
{
}
protected SecondCustomException(SerializationInfo info, StreamingContext context)
: base(info, context)
{
}
}
// Does not violate this rule because
// ThirdCustomException it does not derive directly from
// Exception, SystemException, or ApplicationException
[Serializable]
internal class ThirdCustomException : SecondCustomException
{
internal ThirdCustomException()
{
}
internal ThirdCustomException(string message)
: base(message)
{
}
internal ThirdCustomException(string message, Exception innerException)
: base(message, innerException)
{
}
protected ThirdCustomException(SerializationInfo info, StreamingContext context)
: base(info, context)
{
}
}
Feedback su .NET
.NET è un progetto di open source. Selezionare un collegamento per fornire feedback: