CA1032: Implementar constructores de excepción estándar
TypeName |
ImplementStandardExceptionConstructors |
Identificador de comprobación |
CA1032 |
Categoría |
Microsoft.Design |
Cambio problemático |
Poco problemático |
Motivo
Un tipo extiende Exception y no declara todos los constructores necesarios.
Descripción de la regla
Los tipos de excepción deben implementar los constructores siguientes:
public NewException()
public NewException(string)
public NewException(string, Exception)
protected o private NewException(SerializationInfo, StreamingContext)
El error al proporcionar el conjunto completo de constructores puede dificultar el control correcto de las excepciones.Por ejemplo, el constructor que tiene la firma NewException(string, Exception) se utiliza para crear excepciones producidas por otras excepciones.Sin este constructor no se puede crear ni producir una instancia de la excepción personalizada que contenga una excepción interna (anidada), que es lo que el código administrado debe hacer en esta situación.Los primeros tres constructores de excepción son públicos por convención.El cuarto constructor está protegido en clases no selladas y es privado en clases selladas.Para obtener más información, vea CA2229: Implementar constructores de serialización
Cómo corregir infracciones
Para corregir una infracción de esta regla, agregue los constructores que faltan a la excepción y asegúrese de que tienen la accesibilidad correcta.
Cuándo suprimir advertencias
Es seguro suprimir una advertencia de esta regla si la infracción se ha provocado usando un nivel de acceso diferente al de los constructores públicos.
Ejemplo
El ejemplo siguiente contiene un tipo de excepción que infringe esta regla y otro que se implementa correctamente.
using System;
using System.Runtime.Serialization;
namespace DesignLibrary
{
// Violates rule ImplementStandardExceptionConstructors.
public class BadException : Exception
{
public BadException()
{
// Add any type-specific logic, and supply the default message.
}
}
[Serializable()]
public class GoodException : Exception
{
public GoodException()
{
// Add any type-specific logic, and supply the default message.
}
public GoodException(string message): base(message)
{
// Add any type-specific logic.
}
public GoodException(string message, Exception innerException):
base (message, innerException)
{
// Add any type-specific logic for inner exceptions.
}
protected GoodException(SerializationInfo info,
StreamingContext context) : base(info, context)
{
// Implement type-specific serialization constructor logic.
}
}
}