在使用AppDomain时,我还没有找到一个非常清楚的描述,所以希望有人能够启发我。我有一个简单的测试程序
MSDN example
):
using System;
using System.Reflection;
class Program
{
public static void Main(string[] args)
{
A localA = new A() { Name = "local" };
localA.PrintAppDomain();
AppDomain domain = AppDomain.CreateDomain("NewDomain");
A remoteA = (A)domain.CreateInstanceAndUnwrap(
Assembly.GetExecutingAssembly().FullName, "A");
remoteA.Name = "remote";
remoteA.PrintAppDomain();
remoteA.PrintA(localA);
remoteA.PrintAppDomain();
}
}
[Serializable]
public class A : MarshalByRefObject
{
public string Name { get; set; }
public void PrintAppDomain()
{
Console.WriteLine("In AppDomain {1}",
this.Name, AppDomain.CurrentDomain.FriendlyName);
}
public void PrintA(A a)
{
Console.WriteLine(a.ToString());
}
public override string ToString()
{
return String.Format("A : {0}", this.Name);
}
}
跑步时,打印出来
在appdomain test.exe中
在AppDomain NewDomain中
答:本地
在AppDomain NewDomain中
所以…当我这样做的时候
remote.PrintA(localA)
,这是否涉及编组?查看Reflector中的IL并不意味着这一点,但我认为一个AppDomain中的数据无法访问另一个AppDomain中的数据。
如果我删除
: MarshalByRefObject
从声明
A
,程序打印
在appdomain test.exe中
在appdomain test.exe中
答:本地
在appdomain test.exe中
在这种情况下发生了什么?是否正在创建新的AppDomain?