Интервьюер, вероятно, хотел, чтобы вы обсуждали объектно-ориентированный дизайн и шаблоны, в большей степени, чем он хотел, чтобы вы повторили определение этого конкретного модификатора. Здесь действительно нет правильного ответа. Пуристы могут утверждать, что static
- мерзость. Прагматики могут утверждать, что он заполняет зияющую дыру в абстракции «все является объектом», позволяя вам вызывать служебные методы, для которых нет смысла создавать новые объекты просто для их вызова. Каноническим примером этого является System.Math
класс .
Общее практическое правило, которым руководствуется большинство программистов, заключается в том, что если данные, с которыми вы работаете, не связаны с каким-либо конкретным экземпляром объекта, вероятно, имеет смысл пометить это поле / метод как статическое. В противном случае он, вероятно, должен быть постоянным членом экземпляра объекта.
В документации MSDN уже есть довольно хорошее объяснение:
Используйте модификатор static
для объявления статического члена, который принадлежит самому типу, а не конкретному объекту. Модификатор static может использоваться с классами, полями, методами, свойствами, операторами, событиями и конструкторами, но его нельзя использовать с индексаторами, деструкторами или типами, отличными от классов. Для получения дополнительной информации см. Статические классы и члены статических классов (Руководство по программированию в C #) .
Модификатор static
также имеет более конкретное применение в C #, например, определение методов расширения (которые могут быть определены только внутри статического класса), определение методов взаимодействия и т. Д. Стоит также отметить, что все статические классы sealed
в C #, потому что без конструктора они не могут быть унаследованы от.