के साथ गतिशील रूप से प्रतिनिधियों का निर्माण करना हाय मैं एक ऐसा फ़ंक्शन बनाने की कोशिश कर रहा हूं जो गतिशील रूप से एक ही वापसी मूल्य के साथ एक प्रतिनिधि बनाता है और उसी पैरामीटर को विधिइन्फो के रूप में प्राप्त करता है जो इसे पैरामीटर के रूप में प्राप्त करता है और यह भी पैरामीटर नामों के लिए बहुत महत्वपूर्ण है !पैरामीटर नाम
मैं अब तक क्या किया है एक समारोह है कि एक लैम्ब्डा है कि एक ही पैरामीटर प्रकार प्राप्त करता है और MethodInfo के रूप में ही वापसी मान है रिटर्न बनाने लेकिन उसे पैरामीटर नाम नहीं है:
static void Example()
{
Person adam = new Person();
MethodInfo method = typeof(Person).GetMethod("Jump");
Delegate result = CreateDelegate(adam, method);
result.DynamicInvoke((uint)4, "Yeahaa");
}
private static Delegate CreateDelegate(object instance, MethodInfo method)
{
var parametersInfo = method.GetParameters();
Expression[] expArgs = new Expression[parametersInfo.Length];
List<ParameterExpression> lstParamExpressions = new List<ParameterExpression>();
for (int i = 0; i < expArgs.Length; i++)
{
expArgs[i] = Expression.Parameter(parametersInfo[i].ParameterType, parametersInfo[i].Name);
lstParamExpressions.Add((ParameterExpression)expArgs[i]);
}
MethodCallExpression callExpression = Expression.Call(Expression.Constant(instance), method, expArgs);
LambdaExpression lambdaExpression = Expression.Lambda(callExpression, lstParamExpressions);
return lambdaExpression.Compile();
}
private class Person
{
public void Jump(uint height, string cheer)
{
Console.WriteLine("Person jumped " + height + " "+ cheer);
}
}
करता है किसी के पास कोई सुझाव है कि मैं यह कैसे कर सकता हूं? यह स्पष्ट करने के लिए, पैरामीटर नामों के बारे में मेरा कारण है, इसलिए मैं पैरामीटर नामों के साथ प्रतिनिधि को सक्रिय करने में सक्षम हूं, इसलिए मैं इसे इस तरह कह सकता हूं (जयकार = "हाँ! ', ऊंचाई = 3) (मेरा एप्लिकेशन पाइथन के साथ एकीकृत है, इस प्रकार मैं डायनेमिक इनवोक के बिना ऐसा करने में सक्षम हूं और यही कारण है कि पैरामीटर नाम और मैंने क्यों लिखा '=' और नहीं ':')
आप मुझे धन्यवाद:
यह इस विस्तार विधि का उपयोग करता आज पहले कोशिश की और यह बहुत अच्छा काम किया !! मैं आपके अधिकांश कोड को समझता हूं, लेकिन मैं वास्तव में समझ नहीं पाया कि आप नाम और नाम के साथ क्या कर रहे हैं, यह बेस बेस के नाम के समान क्यों है + प्रकार का नाम, संख्या = 2 क्या है? वैसे भी आपको बहुत धन्यवाद, मैं –
@UchihaMadara के लिए काम करने की कोशिश कर रहा था, यह सुनिश्चित करने का एक तरीका है कि प्रकार का नाम अद्वितीय है, क्योंकि आपके पास एक ही असेंबली में एक ही नाम के साथ दो प्रकार नहीं हो सकते हैं। और नंबर 2 वहां है ताकि नाम 'पर्सनजंप', 'पर्सनजंप 2', 'पर्सनजूम एमपी 3, आदि जैसे हैं – svick
मुझे लगता है कि यह बहुत स्मार्ट है, धन्यवाद! =] –