Часть II. Объектно-ориентированное программирование
Ранее мы пользовались методом
WriteLine()
. Но мы ничего не говори-
ли, откуда он и почему так записывается (
Console.WriteLine()
). Теперь
мы можем сказать, что этот метод из класса
Console
, и он имеет атрибут
static
. Он не вызывается на уровне объекта (мы не можем написать
Console con = new Console()
, создавая объект из класса, а потом писать
con.WriteLine()
; компилятор не пропустит), а вызывается напрямую из
класса
Console
. Если в некотором классе определены только статиче-
ские члены, такой класс можно назвать обслуживающим. Пример то-
му — класс
Console
. Имеется, например, и класс
Math
, предоставляю-
щий возможность работы с математическими величинами и функциями.
Статические члены класса могут оперировать только другими статиче-
скими членами, в противном случае на этапе компиляции возникнет
ошибка.
Для обращения к статическому члену обязательно надо указывать имя
класса, которому этот член принадлежит (как, например, мы это делали
в случае применения функции (а теперь мы знаем — статического ме-
тода) консольного вывода).
Итак, при создании статических полей класса они распределяются по
всем экземплярам класса. Для них в памяти выделяется специальный
участок, который не сбрасывается, когда объект уничтожается. В то
время как нестатические поля — это независимые копии полей для каж-
дого объекта. И они при ликвидации объекта уничтожаются вместе
с ним, т. е. память от них освобождается. Статические поля сохраняются,
а нестатические — не сохраняются. Поэтому при создании класса одной
из задач разработчика является определение, какие поля будут статиче-
скими, а какие нет.
Для вящей убедительности еще один пример. Пусть у работника требу-
ется рассчитать некую процентную ставку. Она для всех работников
рассчитывается по одному и тому же алгоритму, не зависящему от ра-
ботника. Пусть работников на заводе три тысячи. То есть создано три
тысячи экземпляров класса
Персонал
. И в каждом будет присутствовать
метод расчета процентной ставки. Если алгоритм расчета изменился,
надо будет из класса снова формировать три тысячи экземпляров с но-
вым методом, если только метод не имеет атрибута
static
. А с этим
атрибутом формировать заново экземпляры нет надобности, потому что
в каждом экземпляре обращение к этому методу идет с указанием клас-
са, а не объекта, поскольку метод — статический. А в классе метод уже
изменен. И оттуда он будет доставаться уже измененным.
Do'stlaringiz bilan baham: |