鉴于以下两个方法定义:
public int SumClass(int a, int b)
{
return a + b;
}
public int MultClass(int a, int b)
{
return a * b;
}
我希望能够使用方法名称作为字符串
来调用其中一种方法public int Process(string className, int a, int b)
{
// className="SumClass" or className="MultClass"
return className(a,b);
}
答案 0 :(得分:2)
我可以向你展示一种可以做你想要的反思方法。但我不会,因为几乎总有一种更好的方法。你为什么这么想?因为你有不同的加法和乘法方法。一种更好的方法是使用enum
:
public enum ProcessType {
Multiplication,
Addition,
Division,
Subtraction
}
public int Process(ProcessType processType, int a, int b)
{
switch (processType)
{
case ProcessType.Addition:
return SumClass(a, b);
case ProcessType.Multiplication:
return MultClass(a, b);
// ...
}
}
所以如果你想要加2 + 3:
int result = Process(ProcessType.Addition, 2, 3);
答案 1 :(得分:1)
使用字符串字典委托包含实现或代理实现:
//Setup
static Dictionary<string,Func<int,int,int>>() lookups = new Dictionary<string,Func<int,int,int>>();
static classname() { //static constructor
lookups.Add("SumClass", (a,b) => {
return a + b;
});
lookups.Add("MultClass", (a,b) => {
return a * b;
});
}
//Use
public int Process(string className, int a, int b)
{
// className="SumClass" or className="MultClass"
return lookup[className](a,b); //not exactly the same as your request, but close and still a string.
}
答案 2 :(得分:0)
定义类似IOperation的界面:
public interface IOperation
{
int DoMe(int a, int b);
}
现在,您可以在一个位置处理此问题并创建任意数量的实现。 e.g:
public class Addition : IOperation
{
public int DoMe(int a, int b)
{
return a + b;
}
}
然后只进行处理(IOperation操作,int a,int b)。