9

这是我正在寻找一种生成通用委托的方法的原始问题: .Net generate generic methods

以下是在 .NET 3.5 中生成通用委托的代码:

public delegate void PropertyChangedDelegate<OwnerType, PropertyType>(OwnerType sender, String propertyName, PropertyType oldValue, PropertyType newValue);

EventInfo eventInfo = type.GetEvent(property.Name + "Changed");
MethodInfo propertyChangedMethodInfo = this.GetType().GetMethod("content_PropertyChanged", BindingFlags.NonPublic | BindingFlags.Instance);
MethodInfo genericPropertyChangedMethodInfo = propertyChangedMethodInfo.MakeGenericMethod(eventInfo.EventHandlerType.GetGenericArguments());
Delegate delegate_ = Delegate.CreateDelegate(eventInfo.EventHandlerType, genericPropertyChangedMethodInfo);
eventInfo.AddEventHandler(obj, delegate_);

void content_PropertyChanged<OwnerType, PropertyType>(OwnerType sender, String propertyName, PropertyType oldValue, PropertyType newValue)
{
}

这在 .NET 3.5 中有效,但现在当我尝试移植到紧凑框架 3.5 时,Delegate.CreateDelegate 方法需要第三个参数......参数描述说:

它应该是第一个参数,或“委托绑定的对象”。

我试着把'obj'放在那里,'this'和null,我总是得到一个无效的参数异常。

有任何想法吗?

4

2 回答 2

1

不幸的是,.NETCF(.NET Compact Framework)不支持与.NET(完整框架)相同的方法签名,因为只实现了一个子集。

您可以在MSDN 库中看到这一点,其中十个方法重载中只有一个是“.NET Compact Framework 支持”,用 PDA/移动设备的小图形表示。

创建委托方法

这意味着您必须在 .NETCF中使用Delegate.CreateDelegate(Type, Object, MethodInfo) 。

于 2014-03-06T12:58:34.430 回答
0

请检查下面链接中的示例部分,看看它是否有帮助。

http://msdn.microsoft.com/en-us/library/74x8f551.aspx

问候,

查希尔汗

于 2013-08-28T01:47:24.027 回答