Поиск

Статические члены и члены экземпляров

Как и в C++, вы можете определить член класса как статический (static member) или член экземпляра (instance member). По умолчанию каждый член определен как член экземпляра. Это значит, что для каждого экземпляра класса делается своя копия этого члена. Когда член объявлен как статический, имеется лишь одна его копия. Статический член создается при загрузке содержащего класс приложения и существует в течение жизни приложения. Поэтому вы можете обращаться к члену, даже если экземпляр класса еще не создан. Хотя зачем вам это?

Один из примеров — метод Main. CLR (Common Language Runtime) нужна универсальная точка входа в ваше приложение. Поскольку CLR не должна создавать экземпляры ваших объектов, существует правило, требующее определить в одном из ваших классов статический метод Main. Вы можете захотеть использовать статические члены при наличии метода, который формально принадлежит классу, но не требует реального объекта. Скажем, если вам нужно отслеживать число экземпляров данного объекта, которое создается во время жизни приложения. Поскольку статические члены "живут" на протяжении жизни всех экземпляров объекта, должен работать такой код:

using System;
class InstCount <
public InstCountQ
{
instanceCount++; }
static public int instanceCount = 0; }
class AppClass <
public static void Main() /
< /
Console.WriteLine(InstCount.instanceCount);
InstCount id = new InstCountQ;
Console.WriteLine(InstCount.instanceCount);
InstCount ic2 = new InstCountO; Console.WriteLine(InstCount.instanceCount); }
}

В этом примере выходная информация будет следующая:

О
1
2

И последнее замечание по статическим членам: у статических членов должно быть некоторое допустимое значение. Его можно задать при определении члена:

static public int instanceCountl = 10;

Если вы не инициализируете переменную, это сделает CLR после запуска приложения, установив значение по умолчанию, равное 0. Поэтому следующие строки эквивалентны:

static public int instanceCount2; static public int instanceCount2 =0;