2010-05-17 17 views
12

MSDN MethodRental Class के अनुसार गतिशील मॉड्यूल की विधि शरीर को बदलने के लिए अनुमति देता है। हालांकि इसकी सीमाओं के कारण मैं इसके लिए व्यावहारिक उपयोग नहीं कर सकता। Google ने मेरी मदद नहीं की।मेथडेंटल क्लास के व्यावहारिक उपयोग?

किसी भी विचार के लिए कक्षा का उपयोग किस प्रकार किया जा सकता है?

उत्तर

6

यह ICorProfilerInfo::SetILFunctionBody के साथ जोड़ा गया है, लेकिन अधिक बाधाओं के साथ यह ICorProfilerCallback::JITCompilationStarted पर भावना में समान है। ICorProfiler* कक्षाओं का उपयोग किसी भी प्रबंधित विधि के लिए रनटाइम उपकरण करने के लिए किया जा सकता है। ऐसे प्रोफाइलर और डिबगर्स हैं जो इन्हें चल रहे प्रक्रिया के बारे में जानकारी एकत्र करने के लिए उपयोग करते हैं।

आप MethodRental का उपयोग नैदानिक ​​उद्देश्यों के लिए उपकरण कोड में कर सकते हैं। कुछ उदाहरण:

  • फ़ंक्शन प्रवेश/निकास आपको एक निष्पादन ट्रेस देगा जो आप प्रोफाइलिंग डेटा प्राप्त करने के लिए उपयोग कर सकते हैं।
  • Instrumenting तुल्यकालन पुरातन आप दौड़ की स्थिति निदान करने में मदद कर सकते हैं।
  • बुनियादी ब्लॉक इंस्ट्रूमेंट करने से आप कोड कवरेज निर्धारित करने में मदद कर सकते हैं।

आप मौजूदा कोड की कार्यक्षमता को बढ़ाने के लिए MethodRental का भी उपयोग कर सकते हैं। Aspect-oriented programming दिमाग में आता है। आप मौजूदा कोड में सुरक्षा, लॉगिंग, या अन्य क्रॉस-कटिंग डिज़ाइन चिंताओं में 'बुनाई' कर सकते हैं। हालांकि, इसके पहलुओं को व्यक्त करने के लिए इसके लिए कुछ अन्य सुविधा (एक्सएमएल, सी # लाइब्रेरी) की आवश्यकता होगी।

अंत में, आप MethodRental का उपयोग मौजूदा कोड "डिटोर" करने के लिए कर सकते हैं, यानी एक प्रकार का रनटाइम पॉलीमोर्फिज्म बनाने के लिए इंटरसेप्ट विधि कॉल। उदाहरण के लिए, यदि आपके पास क्लाइंट कोड है जो GetConfig के माध्यम से कुछ कॉन्फ़िगरेशन प्राप्त करने के लिए कुछ गतिशील रूप से जेनरेट की गई कक्षा RegistryStore का उपयोग करता है, तो आप फ़ाइल सिस्टम का उपयोग करने के लिए RegistryStore.GetConfig के कार्यान्वयन को बदलने के लिए विधि के आईएल को फिर से लिख सकते हैं। आप क्लाइंट कोड को बदलने के बिना ऐसा कर सकते हैं।

+0

आप AOP के लिए MethodRental उपयोग नहीं कर सकते, क्योंकि यह केवल गतिशील तरीकों का समर्थन करता है, आप कर सकते हैं? – Giorgi

+1

@Giorgi: क्षमा करें, मैं भ्रामक होने का मतलब नहीं था। आप इसे एओपी के लिए उपयोग कर सकते हैं, लेकिन आपके पास अभी भी वही बाधाएं होंगी जो 'मेथड्रेंटल' लागू करती हैं: विशेष रूप से, कि आप इसे गतिशील विधियों/असेंबली पर ही उपयोग कर सकते हैं। आप जो करने की कोशिश कर रहे हैं उसके आधार पर, यह उपयोगी नहीं हो सकता है। मेरे द्वारा सूचीबद्ध सभी उपयोगों में वही मौलिक बाधा है, हालांकि। –

+0

आपके उत्तर के लिए धन्यवाद। चूंकि बाधा बहुत सीमित है क्योंकि यह संभव उपयोग के बारे में नहीं सोच सका। – Giorgi

6

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

एक उपयोग केस एक गतिशील भाषा के लिए रनटाइम को कार्यान्वित करेगा जो पहले से परिभाषित कक्षाओं (बंदर पैचिंग) के तरीकों को बदलने में सहायता करता है। रूबी, पायथन, जावास्क्रिप्ट इत्यादि जैसी भाषाएं

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