79 lines
1.4 KiB
Plaintext
79 lines
1.4 KiB
Plaintext
== Why is this an issue?
|
|
|
|
Exceptions types should provide the following constructors:
|
|
|
|
* ``++public MyException()++``
|
|
* ``++public MyException(string)++``
|
|
* ``++public MyException(string, Exception)++``
|
|
* ``++protected++`` or ``++private MyException(SerializationInfo, StreamingContext)++``
|
|
|
|
That fourth constructor should be ``++protected++`` in unsealed classes, and ``++private++`` in sealed classes.
|
|
|
|
|
|
Not having this full set of constructors can make it difficult to handle exceptions.
|
|
|
|
|
|
=== Noncompliant code example
|
|
|
|
[source,csharp]
|
|
----
|
|
using System;
|
|
|
|
namespace MyLibrary
|
|
{
|
|
public class MyException // Noncompliant: several constructors are missing
|
|
{
|
|
public MyException()
|
|
{
|
|
}
|
|
}
|
|
}
|
|
----
|
|
|
|
|
|
=== Compliant solution
|
|
|
|
[source,csharp]
|
|
----
|
|
using System;
|
|
using System.Runtime.Serialization;
|
|
|
|
namespace MyLibrary
|
|
{
|
|
public class MyException : Exception
|
|
{
|
|
public MyException()
|
|
{
|
|
}
|
|
|
|
public MyException(string message)
|
|
:base(message)
|
|
{
|
|
}
|
|
|
|
public MyException(string message, Exception innerException)
|
|
: base(message, innerException)
|
|
{
|
|
}
|
|
|
|
protected MyException(SerializationInfo info, StreamingContext context)
|
|
: base(info, context)
|
|
{
|
|
}
|
|
}
|
|
}
|
|
----
|
|
|
|
|
|
ifdef::env-github,rspecator-view[]
|
|
|
|
'''
|
|
== Implementation Specification
|
|
(visible only on this page)
|
|
|
|
include::message.adoc[]
|
|
|
|
include::highlighting.adoc[]
|
|
|
|
endif::env-github,rspecator-view[]
|