文字列に名前しかない場合、C#にメソッドを実行する方法があるかどうか知りたいですか?
string methodname="method"
this.RunMethod(methodname)
そんな感じ ?
ありがとう :)
これを試して:
Type t = Type.GetType(typeName);
t.InvokeMember("method", BindingFlags.InvokeMethod | BindingFlags.Public, null, null, null);
タイプ、メソッド名、およびメソッドが静的でない場合はインスタンスが必要です
リフレクションの確認:パラメーターを使用してメソッドを呼び出す方法
これは、拡張メソッドを使用して非常にうまく行うことができます。
public static class MethodEx
{
public static void RunMethod(
this object target,
string methodName,
params object[] values)
{
var type=target.GetType();
var mi =
type.GetMethod(methodName,values.Select(v=>v.GetType()).ToArray());
mi.Invoke(target,values);
}
}
...そしてそれを次のように使用します:
void Main()
{
var m=new Monkey();
m.RunMethod("A",1);
m.RunMethod("A","frog");
}
class Monkey
{
public void A(int a)
{
Console.WriteLine("int A called");
}
public void A(string s)
{
Console.WriteLine("string A called");
}
}
これは、提供されたパラメーターに従って適切なオーバーロードを選択するため、上記のコードは次のように出力します。
intAと呼ばれる
文字列Aと呼ばれる
より良いエラー処理はOPに任せます。
何かのようなもの
Type type = GetType("MyType");
MethodInfo methodInfo = type.GetMethod(methodName);
methodInfo.Invoke()
私はこのようなseomthingを使用しました:
typeof(StringValidator<T>).GetMethod(restriction.Operacion.Nombre).Invoke(null, param) as IList<T>;
メソッド(StringValidator)を含むクラスのタイプに基づいて、名前restriction.Operacion.Nombreでメソッドを取得し、呼び出します。
それが役に立てば幸い
この例には、あなたが探しているものがあります。
String s = (String)calledType.InvokeMember(
methodName,
BindingFlags.InvokeMethod | BindingFlags.Public |
BindingFlags.Static,
null,
null,
null);
(明らかに、これは返品タイプなどによって変わる可能性があります。)
この方法で、任意のインスタンスで名前でメソッドを呼び出すジェネリックメソッドを作成できます。
public void RunMethodOn(object obj, String methodName,params Object[] args)
{
if(obj != null)
{
System.Reflection.MethodInfo method = null;
method = obj.GetType().GetMethod(methodName);
if (method != null)
method.Invoke(obj, args);
}
}
そして、あなたが尋ねるときにそれを使ってあなた自身のインスタンスのメソッドを呼び出してください:
public void RunMethod(String methodName,params Object[] args)
{
ExecuteOn(this, methodName, args);
}