Please consider the following piece of code:
// Create a new application domain
AppDomain ad = AppDomain.CreateDomain("New domain");
Worker work = new Worker();
// if Worker class is marked as 'MarshalByRefObject', this will run in current
// appdomain.
// if Worker class is NOT marked as 'MarshalByRefObject' and is marked as
// 'Serializable', this will run in a new appdomain.
ad.DoCallBack(work.PrintDomain);
// or ad.DoCallBack(new CrossAppDomainDelegate(work.PrintDomain));
// But for static methods:
// If ppp method is static, no marking is required and it will run in
// a new AppDomain.
ad.DoCallBack(Worker.ppp);
How do we explain this behavior of DoCallBack
?
- Why is the non-static method
PrintDomain
executed in the current domain when theWorker
class is markedMarshalByRefObject
? - Why is the non-static method
PrintDomain
executed in a new AppDomain when theWorker
class is markedSerializable
? - Why doesn't the static method need any markings?
PrintDomainStatic
is not static. When the proxy is used (MarshalByRefObject
uncommented) the output isConsoleApplication1.vshost.exe Test
– Ind