2011-05-15 10 views
6

क्या किसी ने कभी भी .NET 4.0 के तहत System.CodeDom का उपयोग करके एक्सटेंशन विधियां उत्पन्न करने का प्रयास किया है? एक विस्तार विधि/पैरामीटर होने के रूप में CodeMemberMethod या CodeParameterDeclarationExpression निर्दिष्ट करने का कोई तरीका प्रतीत नहीं होता है।सिस्टम का उपयोग कर विस्तार विधियां उत्पन्न करें। कोडडॉम

यदि यह संभव नहीं है, तो क्या कोई अच्छा कामकाज है?

धन्यवाद

उत्तर

6

जाहिर CodeDom एक विस्तार विधि के पहले पैरामीटर के लिए सही कोड उत्पन्न करने में सक्षम नहीं है, लेकिन आप इसे इस तरह धोखा कर सकते हैं:

var param = new CodeParameterDeclarationExpression("this string", "s"); 

यह आनंदपूर्वक तथ्य पर ध्यान नहीं देगा कि "इस स्ट्रिंग "मान्य प्रकार नहीं है ...

+0

हेहे। सादगी FTW – sehe

+0

यह वास्तव में मेरी आवश्यकताओं को हास्यास्पद रूप से अच्छी तरह से फिट करता है। मैं वाक्य रचनात्मक कारणों के लिए विस्तार विधियों का उपयोग कर रहा हूं, और कुछ भी नहीं, इसलिए "इस" पैरामीटर पर कोई भी सदस्य कभी भी एक्सेस नहीं किया जाएगा, इसलिए मुझे सिस्टम में किसी भी प्रकार की जांच के बारे में भी चिंता करने की ज़रूरत नहीं है। कोडडॉम ... विचार के लिए धन्यवाद – LorenVS

0

देखें Extension Attribute

उद्धरण:

दृश्य मूल में, आप इस विशेषता को एक विस्तार विधि बनाने के लिए उपयोग करना चाहिए। अधिक जानकारी के लिए, एक्सटेंशन विधियां देखें (विजुअल बेसिक)।

सी # में, आपको इस विशेषता का उपयोग करने की आवश्यकता नहीं है; एक्सटेंशन विधि बनाने के लिए आपको पहले पैरामीटर के लिए इस (सी # संदर्भ) संशोधक का उपयोग करना चाहिए। कंपाइलर एक्सटेंशन विधियों के लिए स्वचालित रूप से ExtensionAttribute को उत्सर्जित करता है। अधिक जानकारी के लिए, एक्सटेंशन विधियां देखें (सी # प्रोग्रामिंग गाइड)।

यदि आप एक्सटेंशन विधियों का समर्थन करने वाले एक कंपाइलर को लिख रहे हैं, तो आपके कंपाइलर को प्रत्येक एक्सटेंशन विधि और प्रत्येक वर्ग और असेंबली पर इस विशेषता को उत्सर्जित करना चाहिए जिसमें एक या अधिक एक्सटेंशन विधियां हों।

+1

यह विधि में एक्सटेंशन एट्रिब्यूट लागू करेगा, जो सी # में एक त्रुटि है ... संकलक कहता है कि –

+0

इसके बजाय 'इस' संशोधक का उपयोग करने का प्रयास कर रहा है कंपाइलर, या प्रतिबिंब उत्सर्जित? मैंने आपके प्रश्न को गलत समझा होगा, अगर आप किसी प्रकार की आईडीई स्क्रिप्ट/एडिन का जिक्र कर रहे हैं; उस ने कहा, आप [एक सेवा के रूप में कंपाइलर] का उपयोग करने पर विचार कर सकते हैं (http://weblogs.asp.net/britchie/archive/2010/08/08/c-compiler-as-a-service.aspx), वैसे भी – sehe

+1

मैं System.CodeDom का उपयोग कर रहा हूं, जो कोड फ़ाइलों (या असेंबली) उत्पन्न करने के लिए मानक .NET ढांचे में शामिल लाइब्रेरी है। – LorenVS

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