В чем разница между статическими методами в нестатическом классе и статическими методами в статическом классе?

у меня есть два класса Class A и ClassB:

static class ClassA
{
    static string SomeMethod()
    {
        return "I am a Static Method";
    }
}

class ClassB
{
    static string SomeMethod()
    {
        return "I am a Static Method";
    }
}

Я хочу знать, в чем разница между ClassA.SomeMethod(); и ClassB.SomeMethod();

, когда они оба могут быть доступны без создания экземпляра класса, зачем нам нужно создать статический класс вместо того, чтобы просто используете статический класс и объявить методы как static?

5 ответов


на только разница в том, что статические методы в классе нестатические не может быть методы расширения.


другими словами, это неверно:

class Test
{
    static void getCount(this ICollection<int> collection)
    { return collection.Count; }
}

тогда как это действительно:

static class Test
{
    static void getCount(this ICollection<int> collection)
    { return collection.Count; }
}

статический класс может содержать только статические члены.

статический метод гарантирует, что даже если вы создадите несколько объектов classB, они будут использовать только одну общую функцию SomeMethod.

технически, нет никакой разницы, за исключением того, что ClassA SomeMethod должны быть статичным.



Если у вас есть нестатический класс, содержащий только статические методы, вы можете создать экземпляр этого класса. Но вы не можете использовать этот экземпляр осмысленно. NB: когда вы не определяете конструктор, компилятор добавляет его для вас.

статический класс не имеет конструктора, поэтому вы не можете создать его экземпляр. Также компилятор выдает ошибку при добавлении к нему метода экземпляра (где вы имели в виду статический метод).


статический метод принадлежит классу, а не статический метод принадлежит объекту класса. То есть нестатический метод может быть вызван только для объекта класса, к которому он принадлежит. Статический метод может обращаться только к статическим элементам. Нестатический метод может обращаться как к статическим, так и к нестатическим элементам, поскольку во время вызова статического метода экземпляр класса может не создаваться (если он вызывается в самом классе). В другом случае можно вызвать только нестатический метод когда экземпляр класса уже создан. Статический метод является общим для всех экземпляров класса. Всякий раз, когда метод вызывается в C++/Java/C#, неявный аргумент (ссылка "this") передается вместе с/без других параметров. В случае вызова статического метода ссылка "this" не передается, поскольку статические методы принадлежат классу и, следовательно, не имеют ссылки "this".