是否有可能在不知道静态类的名称的情况下访问静态类的静态方法?
本文关键字:静态类 访问 情况下 静态方法 不知道 是否 有可能 | 更新日期: 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();
...
}
如果类不是静态已知的,那么自然的解决方案是使用虚方法(多态性),因为这是在运行时解析方法的方法。