2011-12-21 16 views
7

मैंने कई वर्षों से .NET और C# प्रोग्राम किया है, लेकिन हाल ही में प्रतिबिंब के संदर्भ में एक गतिशील असेंबली की अवधारणा के साथ DynamicMethod प्रकार का सामना करना पड़ा है। वे हमेशा आईएल (रनटाइम कोड) पीढ़ी के भीतर इस्तेमाल किया प्रतीत होता है।गतिशील असेंबली और तरीके

दुर्भाग्यवश एमएसडीएन को परिभाषित करने का असाधारण रूप से खराब काम करता है जो गतिशील असेंबली/विधि actuallty है और इसके लिए उनका क्या उपयोग किया जाना चाहिए। क्या कोई मुझे यहां प्रबुद्ध कर सकता है? क्या डीएलआर के साथ कुछ करने के लिए कुछ है? रनटाइम पर असेंबली और विधियों की स्थिर (सामान्य) पीढ़ी के लिए वे अलग कैसे हैं? मुझे कैसे पता होना चाहिए कि उन्हें कब और कब उपयोग करना है?

+0

ढांचे में "डायनामिक एस्सेप्लर" नाम का कोई प्रकार नहीं है। क्या आप असेंबलीबिल्डर के बारे में बात कर रहे हैं? एमएसडीएन प्रतिबिंब। प्रवेश ट्यूटोरियल यहां है: http://msdn.microsoft.com/en-us/library/3y322t50.aspx –

+0

@ डैन रिग्बी: चीयर्स। – Noldorin

+0

@ हंसपैसेंट: ठीक है, शायद कोई प्रकार नहीं, लेकिन निश्चित रूप से एक अवधारणा: http://msdn.microsoft.com/en-us/library/4xtysk39.aspx – Noldorin

उत्तर

4

डायनामिक मोड का उपयोग किसी भी नई असेंबली के बिना विधियों को बनाने के लिए किया जाता है। उन्हें कक्षा के लिए भी बनाया जा सकता है, ताकि आप इसके निजी सदस्यों तक पहुंच सकें। अंत में, डायनामिक मोड क्लास एक प्रतिनिधि का निर्माण करेगा जिसका उपयोग आप विधि को निष्पादित करने के लिए कर सकते हैं। उदाहरण के लिए, एक निजी क्षेत्र तक पहुंचने के लिए:

var d = new DynamicMethod("my_dynamic_get_" + field.Name, typeof(object), new[] { typeof(object) }, type, true); 
var il = d.GetILGenerator(); 
il.Emit(OpCodes.Ldarg_0); 
il.Emit(OpCodes.Ldfld, field); 
if (field.FieldType.IsValueType) 
    il.Emit(OpCodes.Box, field.FieldType); 
else 
    il.Emit(OpCodes.Castclass, typeof(object)); 

il.Emit(OpCodes.Ret); 
var @delegate = (Func<object, object>)d.CreateDelegate(typeof(Func<object, object>)); 

आशा है कि इससे मदद मिलती है।

+0

और इसका डीएलआर से कोई लेना देना नहीं है। यह फ्लाई पर बनाई गई एक विधि है। – ivowiblo

+0

आह, मैं देखता हूं। यह इसे थोड़ा सा साफ़ करता है, इसलिए इसके लिए धन्यवाद। क्या गतिशील * प्रकार * या ऐसे में कोई समतुल्य है? या असेंबली के बारे में क्या? मैंने सोचा कि मैं हमेशा अतीत में फ्लाई पर असेंबली बना सकता हूं, और मुझे वास्तव में "गतिशील" शब्द याद नहीं है। – Noldorin

+0

प्रकार और असेंबली के लिए, यह सिर्फ एक नामकरण है। डायनामिक मोड एक वास्तविक वर्ग है। – ivowiblo

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