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