Вопрос

В C # в чем разница между:

public static class ClassName {}

И:

public class ClassName {}
Это было полезно?

Решение

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

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

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

Другие советы

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

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

Теперь перейдем к статическим классам...

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

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

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

public static class ClassName {}

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

 public class ClassName {}

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

 ClassName classNameObject = new ClassName(); 

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

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

Пример:Система.Математика

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

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

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

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

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

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

http://www.javaworld.com/javaworld/javaqa/1999-08/01-qa-static2.html - очень хорошая статья на эту тему.Это для Java.Но я думаю, что концепция должна быть такой же и в C #.

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top