Подтвердить что ты не робот

Что такое "статический" класс?

В С# какая разница между:

public static class ClassName {}

и

public class ClassName {}
4b9b3361

Ответ 1

Статический класс не может быть создан и может содержать только статические элементы. Следовательно, вызовы для статического класса следующие: MyStaticClass.MyMethod(...) или MyStaticClass.MyConstant.

Нестационарный класс может быть создан и может содержать нестатические элементы (конструкторы экземпляров, деструктор, индексаторы). Нестатический член нестатического класса может быть вызван только через объект:

MyNonStaticClass x = new MyNonStaticClass(...);
x.MyNonStaticMethod(...);

Ответ 2

Во-первых, комментарий к ответу спросил о том, что означает "статический". В терминах С# "статический" означает "относящийся к самому типу, а не к экземпляру типа". Вы получаете доступ к статическому члену (из другого типа), используя имя типа вместо ссылки или значения. Например:

// Static method, so called using type name
Guid someGuid = Guid.NewGuid();
// Instance method, called on a value
string asString = someGuid.ToString();

Теперь статические классы...

Статические классы обычно используются как классы "полезности". Канонический пример, вероятно, System.Math. Не имеет смысла создавать экземпляр математики - это просто "есть". Несколько правил (как "can", так и "can not" ):

  • Статические классы всегда выводятся из object. Вы не можете указать другой базовый тип или сделать статический класс реализацией интерфейса.
  • Статические классы не могут иметь каких-либо членов экземпляра - все переменные, методы и т.д. должны быть статическими.
  • Статические классы не могут объявлять конструкторы экземпляров, и компилятор по умолчанию не создает конструктор без параметров. (До того, как статические классы вошли в С# 2.0, люди часто создавали абстрактный класс с частным конструктором, что предотвращало создание экземпляра. Нет необходимости здесь.)
  • Статические классы неявно абстрактны (т.е. они скомпилированы в IL, который описывает абстрактный класс), но вы не можете добавить модификатор abstract самостоятельно.
  • Статические классы неявно запечатаны (т.е. они скомпилированы в IL, который описывает закрытый класс), но вы не можете добавить модификатор sealed самостоятельно.
  • Статические классы могут быть общими.
  • Статические классы могут быть вложенными в нестатические или статические классы.
  • Статические классы могут иметь вложенные типы, нестатические или статические.
  • Только статические, не общие классы верхнего уровня могут содержать методы расширения (С# 3.0).

Ответ 3

Статический класс также не может быть унаследован, а нестатический класс со статическими членами может быть унаследован от.

Ответ 4

public static class ClassName {}

staic class похож на глобальную переменную, вы можете использовать ее в любом месте своего кода, не создавая экземпляров. Пример. ИмяКласса. После оператора точки вы можете использовать любое свойство или функцию.

 public class ClassName {}

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

 ClassName classNameObject = new ClassName(); 

Ответ 5

Все методы/свойства в статическом классе должны быть статическими, тогда как класс "нормальный" может содержать сочетание экземпляров и статических методов.

Ответ 6

Статический класс может содержать только статические члены.

Статический член может использоваться без создания экземпляра класса.

Ответ 7

Вы не можете создавать (ставить объекты) статический класс. И он может содержать только статические элементы.

Пример: System.Math

Ответ 8

Статические классы и члены используются для создания данных и методов, к которым можно получить доступ, не создавая экземпляр (используя ключевое слово new, у них не может быть конструктора) класса.

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

Эти классы загружаются CLR, когда загружается программа или пространство имен, содержащее класс.

Они также запечатаны, не могут быть унаследованы от.

Ответ 10

Статическая переменная в c

переменная, локальная для класса, как автоматические переменные но статическая переменная не исчезает, поскольку функция больше не активна. Их значения сохраняются. Если управление возвращается, статические переменные имеют одинаковое значение

статическая функция в c функции, которые не видны для функций в других файлах.

* статические элементы данных в cpp * члены данных могут быть переменными или функциями в cpp static применяется для обоих элементов данных сам класс может быть статическим "Существует только одна копия статических членов данных, разделяемых всеми объектами этого класса" члены статических данных могут обращаться к статическим элементам данных

статический класс этот класс не может создавать объекты