अभिव्यक्ति पेड़ और कोडडॉम के बीच अंतर क्या हैं? मुझे किस परिदृश्य के लिए उपयोग करना चाहिए?सी # 4.0: अभिव्यक्ति पेड़ बनाम कोडडॉम
उत्तर
अभिव्यक्ति पेड़ के साथ बहुत कुछ आम है (उदाहरण के लिए) AST। यह सीधे कोड पर मैप नहीं करता है, लेकिन एल्गोरिदम से निर्माण के लिए बहुत ही उपयुक्त है। उदाहरण के लिए, यदि आप एक सूत्र को पार्स कर रहे हैं:
((a + 2)/b)
है जो:
ParameterExpression a = ..., b = ...
var body = Expression.Divide(
Expression.Add(a, Expression.Constant(2)),
b);
var lambda = Expression.Lambda(body,a,b); // optionally with generics
वास्तव में, मैं किया है वास्तव में यह एक पार्सर है कि एक वस्तु पेड़ का निर्माण का उपयोग कर, वस्तुओं पैदा करने के साथ एक "आगंतुक" कार्यान्वयन के माध्यम से पूर्ण विस्तार। .NET 4.0 में, समृद्ध अभिव्यक्ति-वृक्ष समर्थन अधिकांश परिदृश्यों का समर्थन करना संभव बनाता है, और इसे मांग पर संकलित करता है।
भाव का एक अन्य प्रमुख इस्तेमाल होता है कि आप उन्हें रनटाइम पर deconstruct कर सकते हैं, तो अपने कोड में आप हो सकता है:
Foo(x => x.SomeMethod(1, "abc"));
और SomeMethod
विधि-जानकारी, 1
और "abc"
आदि निकालने
codedom कोड को मैप करता है। यह बयान आदि के बारे में है, बहुत इसी तरह आप नियमित कोड कैसे लिखेंगे। कोडेडॉम का सबसे आम उपयोग टूलिंग के हिस्से के रूप में कोड पीढ़ी के लिए है। आप इसे गतिशील संकलन के लिए उपयोग कर सकते हैं, लेकिन ईमानदार होने के लिए यह कठिन है। मैं एक प्रशंसक नहीं हूँ। अच्छी सुविधा यह है कि एक कोडेडॉम पेड़ कई भाषाओं के लिए काम कर सकता है।
एक अन्य दावेदार यहाँ DynamicMethod
और/या ILGenerator
होना चाहिए। यह एएसटी (अभिव्यक्ति) के लिए मानचित्र नहीं है, और इसका उपयोग स्रोत-कोड (कोडोडॉम) उत्पन्न करने के लिए नहीं किया जा सकता है, लेकिन एमएसआईएल उपकरणों तक पूर्ण पहुंच की अनुमति देता है। बेशक, यह भी आवश्यक है कि आप ढेर आदि के मामले में सोचें, लेकिन यह बहुत मेटा-प्रोग्रामिंग के लिए कुशल और प्रभावी है।
तो ILGenerator
बहुत कठिन कोर है, और codedom, एक PITA है तो एक और विकल्प एक स्ट्रिंग के रूप में कोड के क्रम पीढ़ी है। फिर इसे संकलित करने के लिए CSharpCodeProvider
के माध्यम से गुजरें। कोर रनटाइम के कुछ भाग हैं जो ऐसा करते हैं (XmlSerializer
आईआईआरसी)।
तो संक्षेप में प्रस्तुत करने के लिए:
- मेटा प्रोग्रामिंग:
ILGenerator
याCSharpCodeProvider
; भी 4.0 मेंExpression
(लेकिन यह काफी 3.5 में सीमित है) - निपटने एएसटी: कई भाषाओं में
Expression
- कोड पीढ़ी: कोड-डोम
Expression
अभिव्यक्ति पेड़ अभिव्यक्तियों का निर्माण करने के लिए उपयोग किया जाता है। रनटाइम पर स्रोत कोड बनाना। कोडडॉम का उपयोग स्रोत कोड संकलित करने के लिए किया जाता है। इसे बनाने से पहले इसे अस्तित्व में रखना होगा। अभिव्यक्ति पेड़ अधिक लचीले होते हैं, लेकिन उपयोग करने के लिए बहुत कठिन है।
यदि आप अपने आवेदन में स्क्रिप्टिंग जोड़ना चाहते हैं, तो कोडडॉम का उपयोग करें। यदि आप बहुत उन्नत प्रतिबिंब और पसंद करना चाहते हैं, तो अभिव्यक्ति पेड़ का उपयोग करें, लेकिन मैं इसकी अनुशंसा नहीं करता हूं।
- 1. सी # गतिशील विधि - आईएल बनाम अभिव्यक्ति पेड़
- 2. सी # कोडडॉम स्वचालित संपत्ति
- 3. संकलित अभिव्यक्ति पेड़ गलतफहमी?
- 4. अभिव्यक्ति पेड़
- 5. क्या LINQ अभिव्यक्ति पेड़ उचित पेड़ हैं?
- 6. लाल पेड़ बनाम बी पेड़
- 7. यूनिट टेस्टिंग अभिव्यक्ति पेड़
- 8. कन्वर्ट अभिव्यक्ति पेड़
- 9. अभिव्यक्ति/वक्तव्य पेड़
- 10. जावा अभिव्यक्ति पेड़
- 11. Delegate.CreateDelegate बनाम DynamicMethod बनाम अभिव्यक्ति
- 12. एवीएल पेड़ बनाम बी-पेड़
- 13. प्रत्यय पेड़ बनाम प्रत्यय पेड़
- 14. क्या LINQ अभिव्यक्ति पेड़ ट्यूरिंग पूर्ण हैं?
- 15. स्थानीय चर और अभिव्यक्ति पेड़
- 16. गहराई में एक अभिव्यक्ति पेड़
- 17. कोड उद्धरण और अभिव्यक्ति पेड़
- 18. .NET - पुस्तकालयों में अभिव्यक्ति पेड़?
- 19. ट्री बनाम प्रत्यय पेड़ बनाम प्रत्यय सरणी
- 20. सी # Linq कहाँ (अभिव्यक्ति) .FirstorDefault() बनाम .FirstOrDefault (अभिव्यक्ति)
- 21. ट्री बनाम बी + पेड़
- 22. एएसपी.नेट एमवीसी बनाम एएसपी.नेट 4.0
- 23. त्रुटि: एक अभिव्यक्ति पेड़ एक गतिशील आपरेशन
- 24. कोडडॉम और सिल्वरलाइट
- 25. सी # 4.0
- 26. सी # 4.0
- 27. सी # 4.0
- 28. सी # 4.0
- 29. सी # 4.0
- 30. सी # 4.0