是否可以在不知道静态类名称的情况下访问静态类的静态方法

时间:2013-03-10 05:19:52

标签: c#

我只是对此感到好奇..让我说我有N个静态类,除了类名之外看起来完全像以下那样(让我们假装我们有Bank1,Bank2,...,BankN作为类名)< / p>

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

等?

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:-2)

如果这个类是静态知道的,你可以使用泛型:

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

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