.NET

2009-08-26 9 views
7

में कॉल के गतिशील अवरोध मुझे यह जानने के लिए उत्सुकता है कि .NET रनटाइम पर विधि कॉल (या गुणों के आमंत्रण) के गतिशील अवरोध के किसी भी प्रकार का समर्थन करता है या नहीं। यही है, क्या आप स्थिर संकलन जानकारी के बिना किसी ऑब्जेक्ट को कॉल को अवरुद्ध कर सकते हैं जैसे इंटरफ़ेस (कोर्बा डीआईआई (link text) या COM के IDISpatch के साथ)।.NET

यदि नहीं, तो क्या इस संबंध में सी # 4.0 में नई 'गतिशील रूप से टाइप की गई ऑब्जेक्ट्स' सुविधा होगी।

+0

दृढ़ता से संबंधित: http://stackoverflow.com/questions/25803/how-do-i-intercept-a-method-call-in-c –

+0

यह दृढ़ता से संबंधित है? मेरे पास कोई कक्षा नहीं है जिसमें मैं गुण जोड़ सकता हूं। – karmasponge

+0

मैं वर्तमान में 'RealProxy' और 'प्रोफ़ाइल इंजेक्शन एप्लिकेशन ब्लॉक' की जांच कर रहा हूं। – karmasponge

उत्तर

16

कुछ भी अंतर्निहित नहीं है जिसमें आपको उस ऑब्जेक्ट को अवरुद्ध करने की अनुमति मिलती है जिसे आप तत्काल नियंत्रित नहीं कर सकते। इसी तरह, आगामी .NET 4.0 में इसके लिए कोई नई सुविधा नहीं होगी।

आप नियंत्रित कर सकते हैं इन्स्टेन्शियशन: अपनी वस्तु हो सकता है

  1. तो MarshalByRef आप RealProxy उपयोग कर सकते हैं।
  2. आप कुछ आईओसी कंटेनर का उपयोग कर सकते हैं, उदाहरण के लिए। LinFu, Castle Dynamic Proxy
  3. आप PostSharp, Mono Cecil या Microsoft CCI जैसे उपकरण भी एक पोस्ट संकलन कदम के रूप में इंटरसेप्शन के साथ अपने विधानसभाओं के पुनर्लेखन के लिए कर सकता है।

आप इन्स्टेन्शियशन नियंत्रित नहीं कर सकते, तो

  1. आप ICorDebug उपयोग कर सकते हैं - नेट डिबगिंग एपीआई जो वास्तव में उपयोग करने के लिए कड़ी मेहनत और भारी कर रहे हैं।
  2. आप ICorProfiler का उपयोग कर सकते हैं - नेट प्रोफाइलिंग एपीआई जहां उपयोग करने के लिए भी बहुत जटिल हैं।

वैकल्पिक रूप से, आप IronRuby है, जो एक में निर्मित alias_method और define_method अच्छाई (जो आप कुछ भी फिर से परिभाषित करने की अनुमति देता है), इसलिए अवरोधन में पकाया।


है की तरह एक गतिशील भाषा पर विचार कर सकता है। नेट 4.5 ReJIT विधियों के लिए एक विधि पेश कर रहा है जो विधि इंटरसेप्शन के लिए एक और हुक प्रदान करता है (बशर्ते आप एक समवर्ती/बीजी जीसी नहीं चला रहे हैं और विधि को रेखांकित नहीं किया गया है)

+0

यदि आप एक इंटरफेस के माध्यम से भी जा रहे हैं तो आप रियलप्रोक्सी का उपयोग कर सकते हैं। – kyoryu

+0

मुझे लगता है कि 'कैसल डायनामिक प्रॉक्सी' जो मैं ढूंढ रहा हूं, वह सबसे अच्छा लगता है। यह एपीआई अच्छा और सरल है। – karmasponge

+1

अच्छी चीजें। जोड़ने के लिए एक बात - Mono.Cecil PostSharp के साथ कुछ ओवरलैप है। –

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

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