3

デリゲート機能があります

class FuncActivator {
  public delegate void DelFunc(string arg, string val);
}

その関数のインスタンスを、後でプログラム内で同時に開始するように保持します (また、FuncActivator:

List<DelFunc> funcList = new List<DelFunc>();

public void KeepFunc(DelFunc delFunc) {
  funcList.Add(delFunc);
}

ここで、実際のデリゲート名、または少なくともどのクラスがここでそれを渡したかについての情報を取得したいと考えています。例えば、別のクラスで

public class FunnyClass {
  public void FunnyFunc(string arg, string val) {
    //..Do stuff
  }

  public FunnyClass () {
    FuncActivatorInstance.KeepFunc(FunnyFunc);
  }
}

内のメソッドから、リスト内のすべてのデリゲートの名前または呼び出し元をリストしたいと思いFuncActivatorます (「FunnyFunc」または少なくとも「FunnyClass」など)。それは可能ですか?

4

1 に答える 1

5

このコード:

public void PrintFuncs()
{
    foreach (var func in funcList)
    {
        Console.WriteLine(func.Method.Name);
        Console.WriteLine(func.Method.DeclaringType.Name);
    }
}

版画:

FunnyFunc
FunnyClass

FunnyClassリストに追加されたそのインスタンスは、それfunc.Targetも使用したい場合は at にあります。

アタッチされたラムダは匿名であるため、自動生成されたメソッド名を持ちます。クラスが同様に生成された場合は、自動生成された名前も付けられます。参考までに、これから常に非常に読みやすい文字列を作成できるとは限りません。

于 2012-07-09T12:10:41.700 に答える