Dan ini membutuhkan "menggunakan System.Reflection;"
jptsetung
1
Bisakah ini juga digunakan untuk menjalankan fungsi dengan parameter: mis. String f = "method (parameter1, parameter2)";
Guntur
Terima kasih @ottobar atas tanggapannya. Saya tidak tahu apakah ini yang saya cari: Saya perlu menggunakan fungsi skalar SQL dalam kode c # saya. Bagaimana saya menyebutnya?
Chagbert
1
FYI ini tidak berfungsi jika Anda memiliki metode kelebihan beban.
Sean O'Neil
Dengan kode di atas - Metode yang dipanggil harus memiliki pengubah akses - PUBLIC. Jika non publik silakan gunakan bendera Binding - BindingFlags.NonPublic | BindingFlags.Instance .. Type thisType = this.GetType(); MethodInfo theMethod = thisType.GetMethod(TheCommandString, BindingFlags.NonPublic | BindingFlags.Instance); theMethod.Invoke(this, userParameters);
Sibgath
75
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 classMethodInfo 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);
bagaimana dengan metode dari kelas "string"? menggunakan framework 4
Leandro
36
classProgram{staticvoidMain(string[] args){Type type =typeof(MyReflectionClass);MethodInfo method = type.GetMethod("MyMethod");MyReflectionClass c =newMyReflectionClass();string result =(string)method.Invoke(c,null);Console.WriteLine(result);}}publicclassMyReflectionClass{publicstringMyMethod(){returnDateTime.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 =newExpression(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 workedDebug.Assert(19== e.Evaluate());
Dan dalam EvaluateFunctiondelegasi 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
Selamat datang di SO! Saya suka jawaban Anda, bisakah Anda menjelaskan sedikit lebih banyak tentang apa yang Anda lakukan?
a.deshpande012
Hai, tentu saja. Ini adalah aplikasi konsol .net, di dalam "kelas program" ada beberapa metode atau fungsi, misalnya: halo, hello2, hello2. Metode "CallMethod (metode string)" mencari dan biarkan saya memanggil metode apa pun di dalam "kelas program" yang dipanggil dengan nama itu sebagai parameter string. Ketika saya menjalankan aplikasi dari "Windows Console": Saya menulis: "name app" + "metode yang perlu saya panggil". Misalnya: myapp hello, lalu kembalikan "hello world!". Bisa juga "myapp hello2" atau "myapp hello3". Saya pikir bisa bekerja di aplikasi .Net apa pun.
ranobe
Anda harus menambahkan kelas Refleksi: "using System.Reflection;".
public
juga harus .Jawaban:
Iya. Anda bisa menggunakan refleksi. Sesuatu seperti ini:
sumber
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):
sumber
sumber
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:
Dan dalam
EvaluateFunction
delegasi Anda akan memanggil fungsi yang ada.sumber
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
sumber
sumber
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
sumber