2010-11-19 15 views
5

क्या नया (> 2.0) .NET ढांचा कोड पीढ़ी के लिए कोई संवर्द्धन प्रदान करता है?सी # कोड पीढ़ी .NET 4

मैं 2.0 में CodeDom का इस्तेमाल किया और मुझे आश्चर्य है कि कोड पीढ़ी आसान हो सकता है।

उत्तर

2

यह आप क्या हासिल करना चाहते हैं पर निर्भर करता है।

आपने कोड उत्पन्न करने के लिए कोडडॉम का उपयोग करने का उल्लेख किया- यदि आप फ्लाई पर विधियों को उत्पन्न करना चाहते हैं, तो आप LINQ अभिव्यक्तियों का उपयोग कर सकते हैं (मैं अपने सिर के शीर्ष पर वास्तव में एक अच्छा ट्यूटोरियल नहीं सोच सकता लेकिन इसके लिए केवल Google)।

LINQ अभिव्यक्तियों को लिखने में आसान होने का लाभ होता है (मेरे अनुभव में), उत्पन्न करने के लिए तेज़ी से (विशेष रूप से जब आप एक एकल विधि को एन्सेप्लेट करने के लिए एक संपूर्ण कक्षा लिखते हैं) और निष्पादित करने के लिए बहुत तेज़ होते हैं।

'generate a delegate that can access the protected control property "ViewState" 
'(by using LINQ expressions, we can avoid the performance hit of reflection) 
    Dim cntrlParam As ParameterExpression = Expression.Parameter(GetType(Control), "cntrl") 
    Dim vsPropertyAcessor As MemberExpression = Expression.Property(cntrlParam, "ViewState") 
    dim viewStateAccessor as Func(of Control, StateBag) = Expression.Lambda(vsPropertyAcessor, cntrlParam).Compile() 

हम तो आह्वान कर सकते हैं:

निम्नलिखित एक LINQ अभिव्यक्ति है कि एक समारोह है कि एक ASP.Net नियंत्रण में ले जाता है और उसके (सुरक्षित) ViewState संपत्ति मान देता है उत्पन्न करता है की एक VB.Net टुकड़ा है इसलिए जैसे उत्पन्न समारोह:

viewStateAccessor (myCntrl)("my_vs_key") 

यदि आपका स्थिर कोड पीढ़ी पर काम करना चाहते है, तो बनाम की text template सुविधा की जाँच

+0

उसमें जोड़कर, .NET4 में और भी लिंक अभिव्यक्ति समर्थन शामिल है, उदा। लूप और ब्लॉक। –

+0

और मुझे लगता है कि अभिव्यक्तियां केवल एक नया कार्य करती हैं, बिना किसी नई असेंबली के। तो आप एक अतिरिक्त असेंबली लोड करने के ऊपरी हिस्से से बच गए हैं। – CodesInChaos