Шаг 86.
Язык программирования C#. Начала
Знакомство с классами и объектами. Статические члены класса

    На этом шаге мы рассмотрим особенности описания и использования статических методов класса.

    Поля и методы могут быть статическими. Особенность статических полей и методов в том, что они могут использоваться без создания объектов.


Со статическими методами мы уже встречались ранее и обсуждали их. Но там речь шла о статических методах, описанных в том же классе, что и главный метод программы. Соответственно, мы использовали статические методы в том же классе, в котором они были описаны. Но в общем случае статический метод может быть описан в одном классе, а использован в другом.

    Статические члены класса описываются с ключевым словом static. Для обращения к статическому члену класса (полю или методу) указывается имя класса, после которого через точку указывают имя поля или имя метода (с аргументами или без). Таким образом, если при обращении к обычным полям и методам нам нужно указать объект, то при обращении к статическим полям и методам вместо объекта указывается класс. Если статическое поле или метод используются в том же классе, где они описаны, то имя класса при обращении к полю или методу можно не указывать.


Статические поля играют роль глобальных переменных. Они "не привязаны" к какому-то конкретному объекту и существуют "сами по себе". Единственное ограничение - статические поля нужно описывать в классе и при обращении указывать имя этого класса. Аналогично, статические методы в языке C# играют примерно ту же роль, что и функции в языке C++. Статический метод - это, по сути, блок команд, которые не подразумевают использования объекта, и поэтому для выполнения этих команд (вызова метода) объект как таковой не нужен.

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

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

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

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace pr86_1
{
    // Класс со статическим полем и методом: 
    class MyClass
    {
        // Статическое поле: 
        public static int code = 100;
        // Статический метод: 
        public static void show()
        {
            Console.WriteLine("Статическое поле: " + code);
        }
    }

    class Program
    {
        // Класс с главным методом: 
        static void Main()
        {
            // Вызов статического метода:
            MyClass.show();
            // Обращение к статическому полю:
            MyClass.code = 200;
            // Вызов статического метода:
            MyClass.show();
            // Задержка:
            Console.ReadLine();
        }
    }
}
Архив проекта можно взять здесь.

    Ниже представлен результат выполнения программы.


Рис.1. Результат выполнения программы

    В программе описывается класс MyClass, у которого есть открытое статическое целочисленное поле code с начальным значением 100, а также статический метод show() (без аргументов и не возвращающий результат). Метод при вызове отображает в консольном окне значение статического поля code.

    В главном методе программы командой

  // Вызов статического метода:
  MyClass.show();
вызывается статический метод show() класса MyClass. В результате в консоли отображается текущее значение статического поля code. Мы это значение можем изменить например, с помощью команды
  MyClass.code = 200;    ,
после чего значение статического поля становится равным 200. Проверить это легко - достаточно вызвать метод show(): команда
  // Вызов статического метода:
  MyClass.show();      .
В данном случае примечателен факт, что мы не создали ни одного объекта класса MyClass, но это не мешает нам использовать статические члены этого класса.

    На следующем шаге мы закончим изучение этого вопроса.




Предыдущий шаг Содержание Следующий шаг