IT story

C #에서 문자열에서 함수 호출

hot-time 2020. 6. 22. 07:38
반응형

C #에서 문자열에서 함수 호출


PHP에서 다음과 같이 전화를 걸 수 있다는 것을 알고 있습니다.

$function_name = 'hello';
$function_name();

function hello() { echo 'hello'; }

.Net에서 가능합니까?


예. 반사를 사용할 수 있습니다. 이 같은:

Type thisType = this.GetType();
MethodInfo theMethod = thisType.GetMethod(TheCommandString);
theMethod.Invoke(this, userParameters);

동적 메소드 호출을 수행하여 리플렉션을 사용하여 클래스 인스턴스의 메소드를 호출 할 수 있습니다.

실제 인스턴스에 hello라는 메소드가 있다고 가정합니다 (this).

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델리게이트 내에서 기존 함수를 호출합니다.


In Fact I am working on Windows Workflow 4.5 and I got to find a way to pass a delegate from a statemachine to a method with no success. The only way I got to find was to pass a string with the name of the method I wanted to pass as delegate and to convert the string to a delegate inside the method. Very nice answer. Thanks. Check this link https://msdn.microsoft.com/en-us/library/53cz7sc6(v=vs.110).aspx


In C#, you can create delegates as function pointers. Check out the following MSDN article for information on usage: 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.

참고URL : https://stackoverflow.com/questions/540066/calling-a-function-from-a-string-in-c-sharp

반응형