2013-05-16 9 views
6

कृपया कोड का निम्न भाग पर विचार के लिए DoCallBack CrossAppDomainDelegate व्यवहार?गैर स्थिर प्रतिनिधियों

  1. क्यों गैर स्थैतिक विधि PrintDomain वर्तमान डोमेन निष्पादित किया जाता है जब Worker वर्ग MarshalByRefObject चिह्नित है?
  2. Worker कक्षा Serializable पर चिह्नित होने पर गैर-स्थैतिक विधि PrintDomain को एक नए ऐपडोमेन में निष्पादित क्यों किया जाता है?
  3. स्थिर विधि को किसी भी चिह्न की आवश्यकता क्यों नहीं है?

उत्तर

6

क्यों गैर स्थैतिक विधि PrintDomain वर्तमान डोमेन निष्पादित किया जाता है MarshalByRefObject जब कार्यकर्ता वर्ग चिह्नित है?

चूंकि एमबीआरओ करता है, यह आपके प्राथमिक एपडोमेन में बनाए गए ऑब्जेक्ट के लिए प्रॉक्सी बनाता है। द्वितीयक एपडोमेन से उस वस्तु को कौन सा मार्शल करता है जो ऑब्जेक्ट का मालिक होता है, प्राथमिक एपडोमेन।

गैर-स्थैतिक विधि प्रिंटडॉमेन एक नए ऐपडोमेन में क्यों निष्पादित किया जाता है जब वर्कर वर्ग को सीरियलज़ेबल चिह्नित किया जाता है?

क्योंकि उस परिदृश्य नहीं करता है एक प्रॉक्सी का उपयोग करें। ऑब्जेक्ट को प्राथमिक से माध्यमिक एपडोमेन तक मार्शल किया जाता है। संभव है क्योंकि आपने इसे [Serializable] चिह्नित किया है। इसलिए कॉल द्वितीयक एपडोमेन में निष्पादित होता है।

क्यों स्थिर विधि किसी भी निशान की जरूरत नहीं है?

यह स्पष्ट नहीं है कि "चिह्न" से आपका क्या मतलब है, लेकिन यह एक स्थिर विधि के लिए अलग नहीं है।

using System; 

class Program { 
    static void Main(string[] args) { 
     var dom = AppDomain.CreateDomain("Test"); 
     var obj = new WorkerMbro(); 
     dom.DoCallBack(obj.PrintDomain); 
     dom.DoCallBack(obj.PrintDomainStatic); 
     Console.ReadLine(); 
    } 
} 
[Serializable] 
class WorkerMbro /* : MarshalByRefObject */ { 
    public void PrintDomain() { 
     Console.WriteLine(AppDomain.CurrentDomain.FriendlyName); 
    } 
    public void PrintDomainStatic() { 
     Console.WriteLine(AppDomain.CurrentDomain.FriendlyName); 
    } 
} 

आउटपुट के रूप में तैनात:

Test 
Test 

तो निकाली गई टिप्पणियां साथ आउटपुट प्रॉक्सी प्रयोग किया जाता है:, साथ खेलने के लिए आधार वर्ग पर टिप्पणी को निकालने के कुछ कोड दो स्थितियों की तुलना करने के

ConsoleApplication1.vshost.exe 
ConsoleApplication1.vshost.exe 
+1

आपकी विधि 'PrintDomainStatic' स्थिर नहीं है। जब प्रॉक्सी का उपयोग किया जाता है ('मार्शलबीरफॉब्जेक्ट 'असम्बद्ध) आउटपुट' ConsoleApplication1.vshost.exe टेस्ट' है – Troopers

संबंधित मुद्दे