rspec/rules/S4027/csharp/rule.adoc

85 lines
1.5 KiB
Plaintext
Raw Normal View History

== Why is this an issue?
2021-04-28 16:49:39 +02:00
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
2021-04-28 16:49:39 +02:00
2022-02-04 17:28:24 +01:00
[source,csharp]
2021-04-28 16:49:39 +02:00
----
using System;
namespace MyLibrary
{
public class MyException // Noncompliant: several constructors are missing
{
public MyException()
{
}
}
}
----
=== Compliant solution
2021-04-28 16:49:39 +02:00
2022-02-04 17:28:24 +01:00
[source,csharp]
2021-04-28 16:49:39 +02:00
----
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[]