2012-01-14 3 views
3

Что касается объявления класса общественного класса, пожалуйста, посмотрите на эти две части кода:Что лучше: public static Class со статическими методами или public Class со статическими методами?

public class Helper 
{ 
    public static void CallMeganFox(string phoneNumber) 
    { //... 

и

public static class Helper 
{ 
    public static void CallMeganFox(string phoneNumber) 
    { //... 

Что лучше использовать и почему?

+0

Возможный дубликат [Решение о создании статического класса C#] (http://stackoverflow.com/questions/7660094/deciding-to-make-a-c-sharp-class-static) –

ответ

4

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

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

¹ Как указывает Коди Серый, он также может помочь вам раньше поймать ошибки (например, забыть сделать вспомогательный метод static). Хотя эта точка зрения, безусловно, заслуживает внимания, опять же практическая разница будет незначительной: компилятор будет жаловаться, как только вы попытаетесь вызвать метод статически в любом случае.

² Собственно, это не всегда так. Например, компилятор C# не позволит вам определять методы расширения в классе не static - не потому, что он не может, а потому, что он хочет подтолкнуть вас к «лучшей практике».

+0

Согласовано; он не только связывает намерение, он предотвращает ошибки (например, забывает объявить вновь добавленную функцию 'static'). –

+0

@CodyGray: Обновлен ответ соответственно, спасибо. – Jon

1

static класс не может иметь нестатические методы. Если это то, что вы хотите - тогда используйте его.

Более подробную информацию можно найти in this SO question and answers.