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

等?

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 に答える