gpt4 book ai didi

c# - 通过反射将方法赋值给委托(delegate)

转载 作者:太空狗 更新时间:2023-10-30 00:17:14 26 4
gpt4 key购买 nike

我在通过反射将方法动态分配给委托(delegate)实例时遇到了困难。以下是我所面临情况的示例场景。

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

请帮助。

最佳答案

您需要使用 Delegate.CreateDelegate 来获取委托(delegate)实例,而不是方法信息。对于非静态方法,这还包括目标实例。在这种情况下:

object del = Delegate.CreateDelegate(MyProc.FieldType, this, MIDebugger);
MyProc.SetValue(objABC, del);

关于c# - 通过反射将方法赋值给委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3229449/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com