Они живут на протяжении всей жизни AppDomain
. (Для приложений Windows это обычно время жизни процесса, возможно, это не так, в зависимости от того, что вы делаете. AppDomains
периодически перерабатываются в ASP.NET.)
Не думайте о статических переменных как разделяемых между экземплярами, - считайте их принадлежащими к типам, а не любому конкретному экземпляру. Это облегчает понимание того, как все работает, когда вы никогда не создаете любые экземпляров.
Например:
class Test
{
static int x = 0;
static void Main()
{
x = 10;
Console.WriteLine(x);
}
}
Там нет ни одного случая вокруг «доля» Test.x
- но это нормально, потому что это связано с типом Test
, а не с экземплярами из Test
.
Вы можете утверждать, что это довольно тонкое различие, но это тот, который я нашел полезным.
Я склонен думать об этом в терминах «связанных с типом _and_, общим для всех экземпляров». –
@Joel: Но разве это не дает ложного представления о том, что примеры имеют к этому какое-то отношение? Вы можете с одинаковой степенью уверенности утверждать, что Test.x также используется для всех экземпляров «строки» :) –
Я склонен думать, что статические члены НИЧЕГО НЕ делают с экземплярами, отличными от имени типа и обработки модификатора доступа, м с Джоном, а не Джоэлем на этом. –