This page is not yet available in Spanish. We are working on its translation.
If you have any questions or feedback about our current translation project, feel free to reach out to us!

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

Integraciones sin problemas. Prueba Datadog Code Security

PREVIEWING: rob.carlan/rabbitmq-integration-metric-enhancements