どういうわけか、別の AppDomain に渡されたデリゲートは、あたかも から派生したオブジェクトであるかのようにプロキシになると想定しましたMarshalByRefObject
。残念ながら、そうではないようです。
私のコードで、次のMyClass
ようなクラスがあるとしましょう:
[Serializable]
public sealed class MyClass
{
public Func<Input, Output> SomeDelegate;
}
[Serializable]
public sealed class Input { ... }
[Serializable]
public sealed class Output { ... }
のインスタンスMyClass
を別の AppDomain に渡す必要があります。
問題は、 に格納されているデリゲートに、ほとんどすべてのメソッドへの参照が含まれる可能性があることです。これには、から派生したものSomeDelegate
でもない型のインスタンスのメソッドが含まれる可能性があります。[Serializable]
MarshalByRefObject
この質問のために、デリゲートを作成するコードを変更することもMyClass
、MarshalByRefObject
. ただし、[Serializable]
です。
(MyClass
から派生した型のフィールドが含まれている場合MarshalByRefObject
、そのフィールドに格納されているオブジェクトはプロキシに変換され、クラスの残りの部分はシリアル化されることに注意してください。)
クラスをシリアル化されたものとして渡すことができるようにするためにできることはありMarshalByRefObject
ますか? (できれば AppDomain のセットアップで変更するMyClass
必要がないようにしますが、デリゲートを作成するコードを変更する必要がない限り、クラスの変更を伴う提案も歓迎します。)