2010-09-05 10 views
5

क्या रनटाइम के दौरान विधि के शरीर को बदलना संभव है?सी # प्रतिबिंब, एक विधि के शरीर को बदलना

class Person 
{ 
    public void DoSth() 
    { Console.WriteLine("Hello!"); } 
} 

मैं (एक पाठ बॉक्स की तरह) एक सरल इनपुट क्षेत्र जहाँ मैं रनटाइम के दौरान विधि शरीर स्रोत कोड लिख सकते हैं करना चाहते थे।

for (int i = 0; i < 5; i++) 
    Console.WriteLine(i); 

जो जब

new Person().DoSth() 

कहा जाता है excecuted किया जाना चाहिए:

पाठ बॉक्स की तरह डेटा हो सकता है।

सी # (प्रतिबिंब का उपयोग करके) में यह संभव है (या कैसे है)?
अग्रिम में आपकी सहायता के लिए धन्यवाद।

संपादित करें:
यदि उपरोक्त संभव नहीं है, तो क्या रनटाइम के दौरान एक नई विधि बनाना संभव है और इसे कॉल करना संभव है?

+1

यह प्रतिबिंब नहीं है, यह कोड जनरेशन है। यह भी एक अच्छा विचार नहीं है। –

उत्तर

5

Reflection.Emit कार्यावधि में आईएल पैदा करने का एक तरीका है ... http://msdn.microsoft.com/en-us/library/8ffc3x75(v=VS.90).aspx

लाइटवेट कोड पीढ़ी है एक और ... http://blogs.msdn.com/b/joelpob/archive/2004/03/31/105282.aspx

हालांकि, न तो सी # ले लो और इसे संकलित करें। इसके लिए आपको सी # कंपाइलर को बुलाए जाने की अधिक संभावना होगी।

आपका उपयोग केस क्या है (आप ऐसा क्यों करना चाहते हैं)? आपके ऐप डोमेन के भीतर चल रहे कोड के साथ सुरक्षा विचार हैं, इसलिए आपको यह पता लगाना होगा कि आप इससे कैसे निपटेंगे।

+0

मैं स्कैनर जनरेटर के लिए थोड़ा विकासशील वातावरण बनाना चाहता था। जेनरेटर एक सी # विधि उत्पन्न करता है, जिसे टोकन मिलने पर भी निकाला जाना चाहिए। संक्रमण तालिका वास्तव में रनटाइम के दौरान लोड की जा सकती है (फ़ाइल में संग्रहीत हैं)। स्कैनर विनिर्देशन के विकास के दौरान मैं बस छेद स्कैनर प्रोग्राम को पुन: संकलित नहीं करना चाहता हूं। – raisyn

2

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

+0

कम से कम 'गतिशील' के बिना ... –

+1

@Steven, 'गतिशील' कैसे मौजूदा प्रकार को संशोधित करने की अनुमति देता है? –

+0

आप 'गतिशील' के माध्यम से संदर्भित 'ExpandoObject' का उपयोग कर सकते हैं, जिससे आप एक प्रतिनिधि को असाइन कर सकते हैं ताकि इसे विधि सिंटैक्स के साथ बुलाया जा सके। –

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