65 lines
1.2 KiB
Plaintext
65 lines
1.2 KiB
Plaintext
== Why is this an issue?
|
|
|
|
Utility classes, which are collections of ``++static++`` members, are not meant to be instantiated.
|
|
|
|
|
|
C# adds an implicit public constructor to every class which does not explicitly define at least one constructor. Hence, at least one ``++protected++`` constructor should be defined if you wish to subclass this utility class. Or the ``++static++`` keyword should be added to the class declaration to prevent subclassing.
|
|
|
|
=== Noncompliant code example
|
|
|
|
[source,csharp]
|
|
----
|
|
public class StringUtils // Noncompliant
|
|
{
|
|
public static string Concatenate(string s1, string s2)
|
|
{
|
|
return s1 + s2;
|
|
}
|
|
}
|
|
----
|
|
|
|
=== Compliant solution
|
|
|
|
[source,csharp]
|
|
----
|
|
public static class StringUtils
|
|
{
|
|
public static string Concatenate(string s1, string s2)
|
|
{
|
|
return s1 + s2;
|
|
}
|
|
}
|
|
----
|
|
|
|
or
|
|
|
|
|
|
[source,csharp]
|
|
----
|
|
public class StringUtils
|
|
{
|
|
protected StringUtils()
|
|
{
|
|
}
|
|
public static string Concatenate(string s1, string s2)
|
|
{
|
|
return s1 + s2;
|
|
}
|
|
}
|
|
----
|
|
|
|
ifdef::env-github,rspecator-view[]
|
|
|
|
'''
|
|
== Implementation Specification
|
|
(visible only on this page)
|
|
|
|
include::message.adoc[]
|
|
|
|
'''
|
|
== Comments And Links
|
|
(visible only on this page)
|
|
|
|
include::comments-and-links.adoc[]
|
|
endif::env-github,rspecator-view[]
|