Назначить метод для делегирования через отражение - PullRequest
4 голосов
/ 12 июля 2010

Я застрял при динамическом назначении методов экземпляру делегата с помощью рефлексии.Ниже приведен пример сценария ситуации, с которой я столкнулся.

class Program
{
    static void Main(string[] args)
    {
        new DynamicDelegateTest().Test();            
    }
}

public class DynamicDelegateTest
{
    public void Test()
    {
        //This is what i target to do through reflection
        ABC objABC1 = new ABC();
        objABC1.Proc = Debugger;
        objABC1.Test("Helloz");

        //Implementing the same code through reflection
        ABC objABC = new ABC();
        MethodInfo MIDebugger = GetType().GetMethod("Debugger", BindingFlags.NonPublic | BindingFlags.Instance);
        FieldInfo MyProc = objABC.GetType().GetField("Proc", BindingFlags.Public | BindingFlags.Instance);

        //This is the point where I got stuck up
        MyProc.SetValue(objABC, MIDebugger);
        objABC.Test("QWERTY");  
    }

    void Debugger(object Tests)
    {
        Console.WriteLine(Tests);
    }
}

public class ABC
{
    public delegate void Delg(object P1);
    public Delg Proc;

    public void Test(object Tst)
    {
        if (Proc != null) Proc(Tst);
    }
}

Пожалуйста, помогите.

1 Ответ

11 голосов
/ 12 июля 2010

Вам нужно использовать Delegate.CreateDelegate, чтобы получить экземпляр делегата, а не метод-информацию Для нестатических методов это также включает целевой экземпляр. В этом случае:

object del = Delegate.CreateDelegate(MyProc.FieldType, this, MIDebugger);
MyProc.SetValue(objABC, del);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...