Они живут на протяжении всей жизни AppDomain
. (Для приложений Windows это, как правило, время жизни процесса; это может быть не так, в зависимости от того, что именно вы делаете. AppDomains
периодически перерабатываются в ASP.NET.)
Не думайте, что статические переменные являются общими для экземпляров, - думайте, что они принадлежат к типу 1006 *, а не к какому-либо конкретному экземпляру. Это облегчает понимание того, как все работает, когда вы никогда не создаете любых экземпляров.
Например:
class Test
{
static int x = 0;
static void Main()
{
x = 10;
Console.WriteLine(x);
}
}
Не существует экземпляров для "общего доступа" Test.x
- но это нормально, потому что он связан с типом Test
, а не с экземплярами из Test
.
Вы могли бы поспорить, что это довольно тонкое различие, но я нашел его полезным.