2009-05-05 5 views
7

Статичные члены класса экземпляра живут только до тех пор, пока сам экземпляр или статический член не будет проживать на протяжении всего срока службы приложения?Статические члены класса экземпляра

Например, скажем, у меня есть Hashtable как статическое свойство. Если бы я добавил элементы к нему из одного «экземпляра», они были бы доступны из другого «экземпляра»?

ответ

16

Они живут на протяжении всей жизни AppDomain. (Для приложений Windows это обычно время жизни процесса, возможно, это не так, в зависимости от того, что вы делаете. AppDomains периодически перерабатываются в ASP.NET.)

Не думайте о статических переменных как разделяемых между экземплярами, - считайте их принадлежащими к типам, а не любому конкретному экземпляру. Это облегчает понимание того, как все работает, когда вы никогда не создаете любые экземпляров.

Например:

class Test 
{ 
    static int x = 0; 

    static void Main() 
    { 
     x = 10; 
     Console.WriteLine(x); 
    } 
} 

Там нет ни одного случая вокруг «доля» Test.x - но это нормально, потому что это связано с типом Test, а не с экземплярами из Test.

Вы можете утверждать, что это довольно тонкое различие, но это тот, который я нашел полезным.

+0

Я склонен думать об этом в терминах «связанных с типом _and_, общим для всех экземпляров». –

+2

@Joel: Но разве это не дает ложного представления о том, что примеры имеют к этому какое-то отношение? Вы можете с одинаковой степенью уверенности утверждать, что Test.x также используется для всех экземпляров «строки» :) –

+5

Я склонен думать, что статические члены НИЧЕГО НЕ делают с экземплярами, отличными от имени типа и обработки модификатора доступа, м с Джоном, а не Джоэлем на этом. –

Смежные вопросы