2010-07-12 8 views
3

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

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

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

ответ

10

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

object del = Delegate.CreateDelegate(MyProc.FieldType, this, MIDebugger); 
MyProc.SetValue(objABC, del); 
Смежные вопросы