1

我只是对此感到好奇.. 假设我有 N 个静态类,除了类名外,它们看起来与以下内容完全相同(假设我们有 Bank1、Bank2、...、BankN 作为类名)

static class Bank1{
   private static List<string> customers = new List<string>();

   static List<string> getCustomers(){
      return customers;
   }

那么是否有可能有一个方法可以在不知道类名的情况下访问每个 Bank 类的 getCustomers() 方法?所以例如

void printCustomers(string s)
{ 
  *.getCustomers();
  //for-loop to print contents of customers List
}

其中 * 代表在字符串参数中传递的类名(不必是字符串)。有没有办法在不使用类似的东西的情况下做到这一点

if(s.equals("Bank1")) {Bank1.getCustomers();}
else if (s.equals("Bank2")) {Bank2.getCustomers();}

ETC?

4

2 回答 2

1

您可能想为此使用反射:

// s is a qualified type name, like "BankNamespace.Bank1"
var customers = (List<string>)
        Type.GetType(s).InvokeMember("getCustomers",
             System.Reflection.BindingFlags.Static |
             System.Reflection.BindingFlags.InvokeMethod |
             System.Reflection.BindingFlags.Public, // assume method is public
             null, null, null);
于 2013-03-10T14:33:51.133 回答
-2

如果类是静态已知的,则可以使用泛型:

void printCustomers<T>()
{
    T.getCustomers();
    ...
}

如果类不是静态已知的,那么自然的解决方案是使用虚拟方法(多态),因为这是在运行时解析方法的方式。

于 2013-03-10T05:26:15.670 回答