Saya tahu di php Anda bisa menelepon seperti:
$function_name = 'hello';
$function_name();
function hello() { echo 'hello'; }
Apakah ini mungkin di .Net?
Saya tahu di php Anda bisa menelepon seperti:
$function_name = 'hello';
$function_name();
function hello() { echo 'hello'; }
Apakah ini mungkin di .Net?
Jawaban:
Iya. Anda bisa menggunakan refleksi. Sesuatu seperti ini:
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);
Anda dapat memanggil metode instance kelas menggunakan refleksi, melakukan pemanggilan metode dinamis:
Misalkan Anda memiliki metode bernama halo dalam instance aktual (ini):
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();
}
}
Sedikit garis singgung - jika Anda ingin menguraikan dan mengevaluasi seluruh string ekspresi yang berisi fungsi (bersarang!), Pertimbangkan NCalc ( http://ncalc.codeplex.com/ dan nuget)
Ex. sedikit dimodifikasi dari dokumentasi proyek:
// 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());
Dan dalam EvaluateFunction
delegasi Anda akan memanggil fungsi yang ada.
Pada kenyataannya saya bekerja pada Windows Workflow 4.5 dan saya harus menemukan cara untuk mengirimkan delegasi dari statemachine ke metode yang tidak berhasil. Satu-satunya cara saya menemukan adalah untuk lulus string dengan nama metode yang ingin saya sampaikan sebagai delegasi dan untuk mengkonversi string ke delegasi di dalam metode. Jawaban yang sangat bagus Terima kasih. Periksa tautan ini 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();
}
}
Di C #, Anda bisa membuat delegasi sebagai pointer fungsi. Lihat artikel MSDN berikut untuk informasi tentang penggunaan: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
juga harus .