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

本文关键字:静态类 访问 情况下 静态方法 不知道 是否 有可能 | 更新日期: 2023-09-27 18:03:14

我对这个很好奇。假设我有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();}

等等?

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

您可能想要使用反射:

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

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

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

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