static
Ключевое слово в качестве члена во многих языках означает , что вы не должны создать экземпляр этого класса , чтобы иметь возможность иметь доступ к этому члену. Тем не менее, я не вижу никакого оправдания, чтобы сделать весь класс static
. Почему и когда я должен сделать урок static
?
Какие преимущества я получаю от занятий static
? Я имею в виду, что после объявления статического класса все равно следует объявить все члены, к которым он / она хочет иметь доступ без создания экземпляров, как статические.
Это означает, что, например, Math
класс может быть объявлен как обычный (не статический), не влияя на то, как разработчики кодируют. Другими словами, создание статического или нормального класса является своего рода прозрачным для разработчиков.
источник
Ответы:
Для пользователей становится понятным, как используется класс. Например, было бы глупо написать следующий код:
C # не должен запрещать это, но так как он не имеет смысла, он также может сказать пользователю об этом. Некоторые люди (включая меня) придерживаются философии, согласно которой языки программирования (и API-интерфейсы…) должны быть настолько ограничивающими, насколько это возможно, чтобы их было трудно использовать неправильно: единственными допустимыми операциями являются те, которые имеют смысл и (мы надеемся) правильные.
источник
sealed
в первую очередь. Я признаю, что не все люди согласны с этим мнением, но комментарии не являются хорошим местом для обсуждения этого. Но в случаеstatic
этой проблемы даже не ставить себя: создание экземпляров никогда неSystem.Math
будет иметь смысла.Math
класса статическими, не объявляяMath
класс статическими, вы все равно можете использовать его без необходимости создания экземпляров.static
.new Math()
.StackOverflow имеет отличную дискуссию на эту тему . Для удобства я скопирую и вставлю его от имени его автора Марка С. Расмуссена :
источник
Я удивлен, что никто не упомянул, что
static
классы допускают методы расширения - безопасное расширение существующего типа (включая добавление определений методов к интерфейсам ), которым вы не владеете. Например, что в Scalaможет быть выражено в C # как
источник
Для меня статический класс (в C #) подобен вызову функции.
Например
Я передаю строку и получаю обратно строку. Все содержится в этом методе. Нет доступа к переменной-члену и т. Д.
Честно говоря, в основном он использовался для уменьшения количества строк кода:
Почему:
Когда я могу сделать это:
Итак, я бы использовал статические классы в тех случаях, когда я хотел сделать что-то без необходимости в классе и означал бы меньше печатать.
Точки Mark S. действительны, но для меня, если у меня есть некоторые служебные методы, просто притвориться, что я вызываю функцию, чтобы ссылаться на них как на один вкладыш.
Это может быть упрощенно, но в основном я так и использовал
static
.источник