我是 C# 的初学者,我正在学习一本关于 AppDomain 的 C# 教科书。
这是我在教科书“C# 4.0 in a Nutshell 4e (O'Reilly)”中找到的内容
让我们重温最基本的多域场景:
static void Main()
{
AppDomain newDomain = AppDomain.CreateDomain ("New Domain");
newDomain.ExecuteAssembly ("test.exe");
AppDomain.Unload (newDomain);
}
在单独的域上调用 ExecuteAssembly 很方便,但几乎没有与域交互的机会。它还要求目标程序集是可执行文件,并将调用者提交到单个入口点。结合灵活性的唯一方法是采用一种方法,例如将一串参数传递给可执行文件。
强大的方法是使用 AppDomain 的 DoCallBack 方法。这在另一个应用程序域上执行,一个给定类型的方法。类型的程序集会自动加载到域中(如果当前域可以引用它,CLR 将知道它所在的位置)。在以下示例中,当前正在执行的类中的方法在新域中运行:
class Program
{
static void Main()
{
AppDomain newDomain = AppDomain.CreateDomain ("New Domain");
newDomain.DoCallBack (new CrossAppDomainDelegate (SayHello));
AppDomain.Unload (newDomain);
}
static void SayHello()
{
Console.WriteLine ("Hi from " + AppDomain.CurrentDomain.FriendlyName);
}
}
在这里,SayHello() 方法存在于同一个 Program 类中。根据声明,
“类型的程序集会自动加载到域中(如果当前域可以引用它,CLR 将知道它所在的位置)。”
这意味着,如果 SayHello() 方法存在于其他第三方程序集中,那么该程序集是否也会被加载?我不明白这个说法。你能帮我吗?谢谢你。