Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

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


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

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; }
}

Ответ 2

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

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

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

Ответ 4

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

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

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

Ответ 5

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