Je sais en php que vous êtes capable de faire un appel comme:
$function_name = 'hello';
$function_name();
function hello() { echo 'hello'; }
Est-ce possible en .Net?
Oui. Vous pouvez utiliser la réflexion. Quelque chose comme ça:
Type thisType = this.GetType();
MethodInfo theMethod = thisType.GetMethod(TheCommandString);
theMethod.Invoke(this, userParameters);
Vous pouvez appeler les méthodes d'une instance de classe à l'aide de la réflexion, en effectuant un appel de méthode dynamique:
Supposons que vous ayez une méthode appelée hello dans une instance réelle (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();
}
}
Une légère tangence - si vous souhaitez analyser et évaluer une chaîne d'expression entière contenant des fonctions (imbriquées!), Considérez NCalc ( http://ncalc.codeplex.com/ et nuget)
Ex. légèrement modifié par rapport à la documentation du projet:
// 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());
Et dans le délégué EvaluateFunction
, vous appelez votre fonction existante.
En fait, je travaille sur Windows Workflow 4.5 et je dois trouver un moyen de passer un délégué d’une machine à statuer à une méthode sans succès. La seule façon pour moi de trouver était de passer une chaîne avec le nom de la méthode que je voulais transmettre en tant que délégué et de convertir la chaîne en délégué à l'intérieur de la méthode. Très belle réponse. Merci. Vérifiez ce lien https://msdn.Microsoft.com/en-us/library/53cz7sc6(v=vs.110).aspx