Use o atributo [Serializable] ou subclasse de MarshalByRefObject?
Eu gostaria de usar um objeto no AppDomain
Para isso, posso usar o atributo [Serializeable]:
[Serializable]
class MyClass
{
public string GetSomeString() { return "someString" }
}
Or subclasse de MarshalByRefObject:
class MyClass: MarshalByRefObject
{
public string GetSomeString() { return "someString" }
}
Nos dois casos, posso usar a classe assim:
AppDomain appDomain = AppDomain.CreateDomain("AppDomain");
MyClass myObject = (MyClass)appDomain.CreateInstanceAndUnwrap(
typeof(MyClass).Assembly.FullName,
typeof(MyClass).FullName);
Console.WriteLine(myObject.GetSomeString());
Por que as duas abordagens parecem ter o mesmo efeito? Qual é a diferença nas duas abordagens? Quando devo favorecer uma abordagem sobre a outra?
EDIT: Na superfície, eu sei que existem diferenças entre os dois mecanismos, mas se alguém pulasse de um arbusto e me fizesse a pergunta, eu não poderia dar uma resposta adequada. As perguntas são bastante abertas. Eu esperava que alguém pudesse explicar melhor do que e