私は 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);
}
}
ここで、同じ Program クラスに SayHello() メソッドが存在します。発言により、
「型のアセンブリは自動的にドメインに読み込まれます (現在のドメインがそれを参照できる場合、CLR はそれが存在する場所を認識します)。」
これは、SayHello() メソッドが他のサードパーティ アセンブリに存在する場合、そのアセンブリも読み込まれることを意味しますか? 私はこの声明を理解していませんでした。これで私を助けてもらえますか?ありがとうございました。