我有 MainClass 和 MethodFinder 类。我想通过 MethodFinder 获取要在Main中运行的方法名称并执行它。
我该怎么做?
我想要的是一个类,其方法返回 Method1 或 Method2 (基于某些条件),然后可以在 MainClass中运行' MainMethod !
public MainClass
{
public void Main()
{
var methodFinder = new MethodFinder();
var method = methodFinder.Find();
// Execute method
}
private void Method1(){}
private void Method2(){}
}
答案 0 :(得分:2)
只要方法具有相同的签名,您就可以在这种情况下使用Action类型。如果您的方法采用了参数,则可以使用Action<T>
。如果它返回了值,您可以使用Func<TResult>
。
public Action Find(SomeType someParameter)
{
if (someCondition)
{
return new Action(() => Method1());
}
else
{
return new Action(() => Method2());
}
}
请注意,虽然此方法有点像您可能希望使用Polymorphism来实现目标,或者可能Dependency Injection。
答案 1 :(得分:1)
您可以这样做,或使用Reflection更具活力。
public class MethodFinder
{
public delegate void MethodSignature();
//these can live whereever and even be passed in
private static void Method1() => Debug.WriteLine("Method1 executed");
private static void Method2() => Debug.WriteLine("Method2 executed");
//maintain an array of possibilities or soemthing.
//perhaps use reflection instead
private MethodSignature[] methods = new MethodSignature[] { Method1, Method2 };
public MethodSignature FindByName(string methodName)
=> (from m in methods
where m.Method.Name == methodName
select m).FirstOrDefault();
}
用法:
var methodFinder = new MethodFinder();
var method = methodFinder.FindByName("Method2");
method(); //output: "Method2 executed"