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