Metadata

ID: csharp-best-practices/static-class

Language: C#

Severity: Notice

Category: Best Practices

Description

This rule states that a class should be declared as static if it only contains static members. Declaring a class as static indicates that it cannot be instantiated or extended and that all its members are static. This provides a clear signal to other developers that this class is not meant to be used as an object.

What the rule detects

The rule detects if all members are static . If they are, the rule recommends to declare the class static.

How to fix the issue?

Declare the class static by adding the static keyword to its declaration.

Non-Compliant Code Examples

// all attributes are static, the class should be static
public class Foo
{
    private static string _f;

    public static void Bar()
    {
    }
}

public class FooBar
{
    private static readonly IList<MyObject> LargeCollection;

    FooBar()
    {
        string json = System.IO.File.ReadAllText(TestFixtureBase.ResolvePath("large.json"));

        LargeCollection = JsonConvert.DeserializeObject<IList<RootObject>>(json);
    }


    public static void Plop()
    {
    }
}

Compliant Code Examples

public class StaticTestClass
{
    [JsonProperty]
    public int x = 1;

    [JsonProperty]
    public static int y = 2;

    [JsonProperty]
    public static int z { get; set; }

    static StaticTestClass()
    {
        z = 3;
    }
}
public class Foo
{
    bool somethingAttribute;

    private static string _f;

    public static void Bar()
    {
    }
}

public class FooBar
{
    private static readonly IList<MyObject> LargeCollection;

    FooBar()
    {
        string json = System.IO.File.ReadAllText(TestFixtureBase.ResolvePath("large.json"));

        LargeCollection = JsonConvert.DeserializeObject<IList<RootObject>>(json);
    }


    public void Plop()
    {
    }
}


public class NoConstructorReadOnlyCollection<T> : ReadOnlyCollection<T>
{
    public NoConstructorReadOnlyCollection() : base(new List<T>())
    {
    }
}
// has non-static properties
public class Foo
{
    public bool SomeAttributes { get; set; }

    private static string _f;

    public static void Bar()
    {
    }
}
// not static recommended because one attribute is not static
public class Foo
{
    private static string _f;

    public void Bar()
    {
    }
}
public static class Foo
{
    private static string _f;

    public static void Bar()
    {
    }
}

class Cat : Animal
{
    public Cat(string name)
        : base(name)
    {
    }
}
https://static.datadoghq.com/static/images/logos/github_avatar.svg https://static.datadoghq.com/static/images/logos/vscode_avatar.svg jetbrains

Seamless integrations. Try Datadog Code Security

PREVIEWING: guillaume.barrier/ERRORT-5095-general-doc-update