Ответ
Нестатический (обычный) класс:
- Может быть инстанциирован (создан его экземпляр) с помощью оператора
new. - Может содержать как статические, так и нестатические (экземплярные) члены (поля, свойства, методы).
- Может наследоваться от другого класса и быть унаследованным.
- Может реализовывать интерфейсы.
Статический класс (объявляется с модификатором static):
- Нельзя создать экземпляр. Он существует как единый набор функциональности.
- Может содержать только статические члены.
- Не может быть унаследован или наследовать от другого класса (компилятор неявно помечает его как
sealedиabstract). - Не может реализовывать интерфейсы (поскольку интерфейсы определяют контракты для экземпляров).
- Не может иметь конструкторов экземпляров, но может иметь статический конструктор для инициализации.
Когда использовать:
- Статический класс: Идеален для утилитарных методов, которые не требуют состояния (например,
Math,Path,Convert). Это способ организовать методы, логически связанные, но не требующие объекта. - Нестатический класс: Используется для моделирования сущностей, которые имеют состояние и поведение, и которых может быть множество экземпляров (например,
User,Order,FileStream).
Пример:
// Статический класс - утилита
public static class StringHelper
{
public static bool IsNullOrEmpty(string value) => string.IsNullOrEmpty(value);
}
// Использование: StringHelper.IsNullOrEmpty(text);
// Нестатический класс - сущность
public class Logger
{
private string _logName;
public Logger(string name) => _logName = name;
public void Log(string message) => Console.WriteLine($"[{_logName}]: {message}");
}
// Использование: var logger = new Logger("App"); logger.Log("Start");