क्या आईएल जनरेटर के साथ जेनरिक का उपयोग करना संभव है?जेनरिक?
DynamicMethod method = new DynamicMethod(
"GetStuff", typeof(int), new Type[] { typeof(object) });
ILGenerator il = method.GetILGenerator();
... etc
क्या आईएल जनरेटर के साथ जेनरिक का उपयोग करना संभव है?जेनरिक?
DynamicMethod method = new DynamicMethod(
"GetStuff", typeof(int), new Type[] { typeof(object) });
ILGenerator il = method.GetILGenerator();
... etc
हां, यह संभव है, लेकिन DynamicMethod
कक्षा के साथ नहीं। यदि आप इस कक्षा का उपयोग करने के लिए प्रतिबंधित हैं, तो आप भाग्य से बाहर हैं। यदि आप इसके बजाय MethodBuilder
ऑब्जेक्ट का उपयोग कर सकते हैं, तो पढ़ें।
एक सामान्य विधि के शरीर को उत्सर्जित करना, अधिकांश उद्देश्यों और उद्देश्यों के लिए, अन्य विधियों के शरीर को उत्सर्जित करने से अलग नहीं है, सिवाय इसके कि आप सामान्य प्रकार के स्थानीय चर बना सकते हैं। यहाँ एक सामान्य विधि सामान्य तर्क टी के साथ MethodBuilder
का उपयोग कर बनाने और प्रकार टी की एक स्थानीय बनाने का एक उदाहरण है:
MethodBuilder method;
//... Leaving out code to create MethodBuilder and store in method
var genericParameters = method.DefineGenericParameters(new[] { "T" });
var il = method.GetILGenerator();
LocalBuilder genericLocal = il.DeclareLocal(genericParameters[0]);
किसी अन्य विधि से कि सामान्य विधि के लिए एक कॉल का उत्सर्जन करने के लिए, इस कोड का उपयोग।
il.EmitCall(OpCodes.Call, method.MakeGenericMethod(typeof(int)), new[] { typeof(int) }));
[सामान्य प्रकार पैरामीटर के साथ DynamicMethod] (की
'GetGenericArguments()' को कॉल करने के बजाय आप 'DefineGenericParameters()' द्वारा लौटाई गई सरणी का उपयोग कर सकते हैं। – svick
धन्यवाद, मुझे यह नहीं पता था। यह अभी तय है। – aboveyou00
धन्यवाद @svick और उपरोक्त। मैंने एसओ पर पढ़ा कि यह संभव नहीं था, और किसी भी तरह से पूछने के लिए सोचा - मुझे आशा थी कि वह जानकारी पिछले .NET के पिछले संस्करण के लिए हो सकती है। – sgtz
संभव डुप्लिकेट http: मान लिया जाये कि
method
एकMethodInfo
याMethodBuilder
उद्देश्य यह है कि एक सामान्य विधि परिभाषा का वर्णन करता है, तो आप एक फोन है कि विधि के लिए एक सामान्य पैरामीटरint
साथ इस प्रकार का उत्सर्जन कर सकते हैं : //stackoverflow.com/questions/788618/dynamicmethod-with-generic-type-parameters) –यह आपके प्रश्न से स्पष्ट नहीं है: क्या आप एक सामान्य विधि बनाना चाहते हैं या बस इसके अंदर कुछ सामान्य प्रकार (या विधि) का उपयोग करना चाहते हैं? – svick
@svick: मैं गतिशील रूप से एक सामान्य विधि बनाना चाहता हूं। – sgtz