Why is this an issue?
Whenever there are portions of code that are duplicated and do not depend on the state of their container class, they can be centralized inside a
"utility class". A utility class is a class that only has static members, hence it should not be instantiated.
How to fix it
To prevent the class from being instantiated, you should define a non-public constructor. This will prevent the compiler from implicitly generating
a public parameterless constructor.
Alternatively, adding the static
keyword as class modifier will also prevent it from being instantiated.
Code examples
Noncompliant code example
public class StringUtils // Noncompliant: implicit public constructor
{
public static string Concatenate(string s1, string s2)
{
return s1 + s2;
}
}
or
public class StringUtils // Noncompliant: explicit public constructor
{
public StringUtils()
{
}
public static string Concatenate(string s1, string s2)
{
return s1 + s2;
}
}
Compliant solution
public static class StringUtils // Compliant: the class is static
{
public static string Concatenate(string s1, string s2)
{
return s1 + s2;
}
}
or
public class StringUtils // Compliant: the constructor is not public
{
private StringUtils()
{
}
public static string Concatenate(string s1, string s2)
{
return s1 + s2;
}
}