问题
Is one copy of a public static variable created for each AppDomain in a process or is it just one copy for the whole process? In other words if I change the value of a static variable from within one AppDomain, will it affect the value of the same static variable within another AppDomain in the same process?
回答1:
It is per application domain as proven by this example:
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");
}
}
回答2:
It is limited to the AppDomain, in other words, the variable exists as a separate value in each AppDomain.
来源:https://stackoverflow.com/questions/6562162/in-net-is-the-staticness-of-a-public-static-variable-limited-to-an-appdomain