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

У меня два класса 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();

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


person Vamsi    schedule 09.03.2011    source источник


Ответы (4)


Единственное отличие состоит в том, что статические методы в нестатическом классе не могут быть методы расширения.


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

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; }
}
person user541686    schedule 09.03.2011

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

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

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

person Benjamin S    schedule 09.03.2011

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

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

См. Также документы.

person Hans Kesting    schedule 19.09.2012
comment
Однако вы можете определить статический конструктор в статическом классе, который вызывается только один раз при первом использовании? - person Piotr Kula; 17.05.2019
comment
@PiotrKula да это правда. Статический конструктор вызывается автоматически перед первым использованием - person Hans Kesting; 17.05.2019

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

person Akshatha    schedule 09.03.2011
comment
Как мы можем вызвать статический метод из объекта класса, пожалуйста, дайте мне пример - person Vamsi; 09.03.2011
comment
Однако статический метод можно вызывать как для класса, так и для объекта класса. Я считаю это утверждение неправильным. - person emeh; 26.03.2011