其他分享
首页 > 其他分享> > CodeGo.net>有可能挂钩使用反射匿名代表?

CodeGo.net>有可能挂钩使用反射匿名代表?

作者:互联网

MSDN article开始,有很多方法可以使用反射连接委托.

似乎最好的方法是使用CreateDelegate方法:

Delegate d = Delegate.CreateDelegate(delegateType, targetObject, handlerMethodName);

通常情况下,我将指向targetObject类中的处理程序方法.
但是,如果委托是匿名创建的,该怎么办?例:

public delegate void SelectedVehiclesCollectionDelegate(string query, List<Vehicles> list);
...
myObject.SelectedVehiclesCollection = (query, list) =>
                    {
                      //assign list of vehicles to list matching query
                    };  

类定义中没有委托所引用的方法.我需要调用在运行时未知的委托,获得结果列表.

好的,看来我的术语对我来说是最好的.并不是要创建一个处理程序,而是调用已经存在的处理程序(Tomas Petricek的答案仍然给了我一些很好的见识).

解决方法:

根据您的评论,这听起来像是在调用一个委托而不是创建一个委托,在这种情况下,如果您在编译时确实不知道相关的委托类型,那么您可能会追求Delegate.DynamicInvoke.

如果您知道相关的委托人类型,而不仅仅是属性名,则可以强制转换:

MyDelegate handler = (MyDelegate) propertyInfo.GetValue(obj, null);
handler(...); // Call as normal

标签:reflection,delegates,c
来源: https://codeday.me/bug/20191208/2093156.html