Иногда требуется определить такой член класса, который будет использоваться независимо от всех остальных объектов этого класса. Как правило, доступ к члену класса организуется посредством объекта этого класса, но в то же время можно создать член класса для самостоятельного применения без ссылки на конкретный экземпляр объекта. Для того чтобы создать такой член класса, достаточно указать в самом начале его объявления ключевое словоstatic.Если член класса объявляется какstatic,то он становится доступным до создания любых объектов своего класса и без ссылки на какой-нибудь объект. С помощью ключевого словаstaticможно объявлять как переменные, так и методы. Наиболее характерным примером члена типаstaticслужит методMain , который объявляется таковым потому, что он должен вызываться операционной системой в самом начале выполняемой программы.
Для того чтобы воспользоваться членом типаstaticза пределами класса, достаточно указать имя этого класса с оператором-точкой. Но создавать объект для этого не нужно. В действительности член типаstaticоказывается доступным не по ссылке на объект, а по имени своего класса. Так, если требуется присвоить значение 10 переменнойcountтипаstatic,являющейся членом классаTimer,то для этой цели можно воспользоваться следующей строкой кода.
Timer.count = 10;
Эта форма записи подобна той, что используется для доступа к обычным переменным экземпляра посредством объекта, но в ней указывается имя класса, а не объекта. Аналогичным образом можно вызвать метод типаstatic,используя имя класса и оператор-точку. ,
Переменные, объявляемые какstatic,по существу, являются глобальными. Когда же объекты, объявляются в своем классе, то копия переменной типаstaticне создается. Вместо этого все экземпляры класса совместно пользуются одной и той же переменной типа static. Такая переменная инициализируется перед ее применением в классе. Когда же ее инициализатор не указан явно, то она инициализируется нулевым значением, если относится к числовому типу данных, пустым значением, если относится к ссылочному типу, или же логическим значением false, если относится к типу bool. Таким образом, переменные типа static всегда имеют какое-то значение.
Метод типа static отличается от обычного метода тем, что его можно вызывать по имени его класса, не создавая экземпляр объекта этого класса. Пример такого вызова уже приводился ранее. Это был метод Sqrt типа static, относящийся к классу System.Math из стандартной библиотеки классов С#.