c#如何在另一个类字符串

时间:2015-04-22 13:40:08

标签: c# class

鉴于以下两个方法定义:

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);
}

3 个答案:

答案 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)。