我只是对此感到好奇..让我说我有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();}
等?
答案 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();
...
}
如果静态不知道类,那么自然的解决方案是使用虚方法(多态),因为这是在运行时解析方法的方法。