Что такое "статический" класс?
В C# в чем разница между:
public static class ClassName {}
и:
public class ClassName {}
10 ответов
статический класс не может быть инстанцирован, и может содержать только статические члены. Следовательно, вызовы статического класса являются следующими: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 {}
статический класс похож на глобальную переменную: вы можете использовать его в любом месте кода без их создания. Например: ClassName. После оператора точки можно использовать любое его свойство или функцию.
public class ClassName {}
но если у вас есть нестатический класс, вам нужно создать экземпляр этого класса. Например:
ClassName classNameObject = new ClassName();
все методы / свойства в статическом классе должны быть статическим, тогда как "нормальный" класс может содержать сочетание экземпляра и статических методов.
вы не можете создать экземпляр (создать объекты) статического класса. И он может содержать только статические члены.
Пример: Система.Математика!--1-->
статический класс может содержать только статические члены.
статический член можно использовать без создания экземпляра класса.
статические классы и члены используются для создания данных и методов, к которым можно получить доступ без создания экземпляра (используя new
ключевое слово, они не могут иметь конструктор) класса.
статические классы могут быть объявлены, когда нет зависимости от собственной идентичности объекта, поэтому класс должен содержать только статические члены.
эти классы загружаются средой CLR при загрузке программы или пространства имен, содержащего класс.
они также запечатанный, не может быть унаследован от.
http://www.javaworld.com/javaworld/javaqa/1999-08/01-qa-static2.html - очень хорошая статья об этом. Это для Java. Но я думаю, что концепция должна быть такой же и в C#.
статическая переменная в c
переменная, локальная для класса как автоматические переменные но статическая переменная не исчезает, поскольку функция больше не активна.Их ценности сохраняются.Если управление возвращается,статические переменные имеют одинаковое значение
статическая функция в c функции, которые не видны функциям в других файлах.
*статические члены данных в cpp* члены данных могут быть переменными или функциями в cpp применяется статика как члены данных сам класс может быть статическим "Существует только одна копия статических данных memberss общими для всех объектов данного класса" статические члены данных могут получить доступ только к статическим членам данных
статический класс этот класс не может создавать экземпляры объектов