Я хотел бы использовать объект в доменах приложений.
Для этого я могу использовать атрибут [Serializeable]:
[Serializable]
class MyClass
{
public string GetSomeString() { return "someString" }
}
Или подкласс от MarshalByRefObject:
class MyClass: MarshalByRefObject
{
public string GetSomeString() { return "someString" }
}
В обоих случаях я могу использовать класс следующим образом:
AppDomain appDomain = AppDomain.CreateDomain("AppDomain");
MyClass myObject = (MyClass)appDomain.CreateInstanceAndUnwrap(
typeof(MyClass).Assembly.FullName,
typeof(MyClass).FullName);
Console.WriteLine(myObject.GetSomeString());
Почему оба подхода имеют одинаковый эффект? В чем разница в обоих подходах? Когда мне следует отдать предпочтение одному подходу перед другим?
РЕДАКТИРОВАТЬ: На поверхности я знаю, что есть различия между обоими механизмами, но если кто-то выпрыгнул из куста и спросил меня, я не смог бы дать ему правильный ответ. Вопросы довольно открытые. Я надеялся, что кто-то сможет объяснить это лучше, чем я.