В чем разница между помещением статического метода в статический класс и размещением метода экземпляра в статическом классе? - PullRequest
0 голосов
/ 19 августа 2011

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

public static class MyClass
{
    public static string SayHello()
    {
        return "Hello";
    }
}

public static class MyClass
{
    public string SayHello()
    {
        return "Hello";
    }
}

Является ли второй метод SayHello статическим, поскольку он находится в статическом классе?Если да, есть ли причина включать ключевое слово static в методы, когда они определены в статическом классе?

Ответы [ 4 ]

8 голосов
/ 19 августа 2011

Второй пример даже невозможно сделать в c #, вы получите ошибку времени компиляции:

'SayHello': невозможно объявить члены экземпляра в статическом классе

Таким образом, вы должны объявить членов статической калибровки с ключевым словом static.

1 голос
/ 19 августа 2011

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

0 голосов
/ 19 августа 2011

статические классы запечатаны, не могут содержать членов экземпляра. Статические методы являются частью Типа, а не экземпляра, и статические методы не могут получить доступ к членам экземпляра. Статические методы не могут быть виртуальными, но могут быть перегружены. Статические методы также генерируют IL-коды «call» вместо «callvirt».

Статические классы имеют статический конструктор, который не принимает аргументов и вызывается перед первым использованием типа.

0 голосов
/ 19 августа 2011

"... Поэтому создание статического класса во многом аналогично созданию класса, который содержит только статические члены и закрытый конструктор. Закрытый конструктор предотвращает создание экземпляра класса.

Преимущество использования статического класса заключается в том, что компилятор может проверить, чтобы случайно не добавить ни одного члена экземпляра. Компилятор гарантирует, что экземпляры этого класса не могут быть созданы. "

http://msdn.microsoft.com/en-us/library/79b3xss3(v=vs.80).aspx

...