В .Net «Статичность» общедоступной статической переменной ограничена доменом приложения или всем процессом? - PullRequest
5 голосов
/ 03 июля 2011

Является ли одна копия общедоступной статической переменной, созданной для каждого домена приложения в процессе, или это всего лишь одна копия для всего процесса?Другими словами, если я изменю значение статической переменной из одного AppDomain, повлияет ли это на значение той же статической переменной в другом AppDomain в том же процессе?

Ответы [ 2 ]

10 голосов
/ 03 июля 2011

Это для домена приложения, как доказано в этом примере:

public class Foo
{
    public static string Bar { get; set; }
}

public class Test
{
    public Test()
    {
        Console.WriteLine("Second AppDomain: {0}", Foo.Bar);
    }
}

class Program
{
    static void Main()
    {
        // Set some value in the main appdomain
        Foo.Bar = "bar";
        Console.WriteLine("Main AppDomain: {0}", Foo.Bar);

        // create a second domain
        var domain = AppDomain.CreateDomain("SecondAppDomain");

        // instantiate the Test class in the second domain
        // the constructor of the Test class will print the value
        // of Foo.Bar inside this second domain and it will be null
        domain.CreateInstance(Assembly.GetExecutingAssembly().FullName, "Test");
    }
}
0 голосов
/ 03 июля 2011

Оно ограничено доменом приложений, другими словами, переменная существует как отдельное значение в каждом домене приложений.

...