我想跨 AppDomains 使用一个对象。
为此,我可以使用 [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());
为什么这两种方法似乎具有相同的效果?两种方法有什么区别?我什么时候应该偏爱一种方法而不是另一种方法?
编辑:表面上我知道两种机制之间存在差异,但是如果有人从灌木丛中跳出来问我这个问题,我无法给他正确的答案。这些问题是相当开放的问题。我希望有人能比我做得更好。