== 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)

=== Message

Implement the missing constructors for this exception.


=== Highlighting

Exception class declaration


endif::env-github,rspecator-view[]
