मुझे पता है कि आप php में एक कॉल करने में सक्षम हैं जैसे:
$function_name = 'hello';
$function_name();
function hello() { echo 'hello'; }
क्या यह .Net में संभव है?
मुझे पता है कि आप php में एक कॉल करने में सक्षम हैं जैसे:
$function_name = 'hello';
$function_name();
function hello() { echo 'hello'; }
क्या यह .Net में संभव है?
जवाबों:
हाँ। आप प्रतिबिंब का उपयोग कर सकते हैं। कुछ इस तरह:
Type thisType = this.GetType();
MethodInfo theMethod = thisType.GetMethod(TheCommandString);
theMethod.Invoke(this, userParameters);
Type thisType = this.GetType(); MethodInfo theMethod = thisType.GetMethod(TheCommandString, BindingFlags.NonPublic | BindingFlags.Instance); theMethod.Invoke(this, userParameters);
आप प्रतिबिंब का उपयोग करते हुए एक वर्ग उदाहरण के तरीकों को लागू कर सकते हैं, एक गतिशील विधि मंगलाचरण कर सकते हैं:
मान लीजिए कि आपके पास वास्तविक उदाहरण में हेलो नामक एक विधि है (यह):
string methodName = "hello";
//Get the method information using the method info class
MethodInfo mi = this.GetType().GetMethod(methodName);
//Invoke the method
// (null- no parameter for the method call
// or you can pass the array of parameters...)
mi.Invoke(this, null);
class Program
{
static void Main(string[] args)
{
Type type = typeof(MyReflectionClass);
MethodInfo method = type.GetMethod("MyMethod");
MyReflectionClass c = new MyReflectionClass();
string result = (string)method.Invoke(c, null);
Console.WriteLine(result);
}
}
public class MyReflectionClass
{
public string MyMethod()
{
return DateTime.Now.ToString();
}
}
एक मामूली स्पर्शरेखा - यदि आप संपूर्ण अभिव्यक्ति स्ट्रिंग को पार्स और मूल्यांकित करना चाहते हैं जिसमें निहित (नेस्टेड!) फ़ंक्शन हैं, तो NCalc ( http://ncalc.codeplex.com/ और nuget) पर विचार करें।
पूर्व। परियोजना प्रलेखन से थोड़ा संशोधित:
// the expression to evaluate, e.g. from user input (like a calculator program, hint hint college students)
var exprStr = "10 + MyFunction(3, 6)";
Expression e = new Expression(exprString);
// tell it how to handle your custom function
e.EvaluateFunction += delegate(string name, FunctionArgs args) {
if (name == "MyFunction")
args.Result = (int)args.Parameters[0].Evaluate() + (int)args.Parameters[1].Evaluate();
};
// confirm it worked
Debug.Assert(19 == e.Evaluate());
और EvaluateFunction
प्रतिनिधि के भीतर आप अपने मौजूदा कार्य को कहेंगे।
वास्तव में मैं विंडोज वर्कफ़्लो 4.5 पर काम कर रहा हूं और मुझे एक प्रतिनिधि को एक स्टेटमैचिन से एक विधि को पारित करने के लिए एक तरीका मिला है जिसमें कोई सफलता नहीं है। एकमात्र तरीका जो मुझे मिला वह यह था कि जिस विधि को मैं प्रतिनिधि के रूप में पारित करना चाहता था उस विधि के नाम के साथ एक स्ट्रिंग को पास करना और स्ट्रिंग को विधि के अंदर एक प्रतिनिधि में परिवर्तित करना था। बहुत अच्छा जवाब। धन्यवाद। इस लिंक की जाँच करें https://msdn.microsoft.com/en-us/library/53cz7sc6(v=vs.110).aspx
class Program
{
static void Main(string[] args)
{
string method = args[0]; // get name method
CallMethod(method);
}
public static void CallMethod(string method)
{
try
{
Type type = typeof(Program);
MethodInfo methodInfo = type.GetMethod(method);
methodInfo.Invoke(method, null);
}
catch(Exception ex)
{
Console.WriteLine("Error: " + ex.Message);
Console.ReadKey();
}
}
public static void Hello()
{
string a = "hello world!";
Console.WriteLine(a);
Console.ReadKey();
}
}
C # में, आप फ़ंक्शन पॉइंटर्स के रूप में प्रतिनिधि बना सकते हैं। उपयोग के बारे में जानकारी के लिए निम्नलिखित MSDN लेख देखें:http://msdn.microsoft.com/en-us/library/ms173171(VS.80).aspx
public static void hello()
{
Console.Write("hello world");
}
/* code snipped */
public delegate void functionPointer();
functionPointer foo = hello;
foo(); // Writes hello world to the console.
public
भी होना चाहिए ।