2013-05-17 9 views
9

Hier ist die ursprüngliche Frage, wo ich nach einer Möglichkeit, ein generischen Delegaten zu generieren: .Net generate generic methods.NET generische Methode erzeugen - Compact Framework

Hier ist der Code ist ein generischen Delegaten in .NET 3.5 zu generieren:

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

Dies funktioniert in .NET 3.5, aber jetzt, wenn ich in den Hafen der kompakten Rahmen versucht, 3.5, erfordert die Delegate.CreateDelegate Verfahren einen dritten Parameter ... die Parameter Beschreibung sagt:

Es sollte das erste Argument sein, oder 'das Objekt, an das der Delegat gebunden ist'.

Ich habe versucht, 'obj' dort, und 'das' und null, und ich bekomme immer eine ungültige Argument Ausnahme.

Irgendwelche Ideen?

+0

Könnte es sein, dass etwas mit den anderen beiden Argumenten auf der kompakten Plattform nicht stimmt? –

+0

Ich versuchte genau das gleiche mit drei Argumente wie diese auf dem Desktop .NET und es funktionierte: Delegate delegate_ = Delegate.CreateDelegate (eventInfo.EventHandlerType, this, genericPropertyChangedMethodInfo); –

+0

Ich schaute näher und der Fehler sagte: "ReturnType für Open generische Methoden wird nicht unterstützt" ... hmmm –

Antwort

1

leider nicht die gleiche Methode Signaturen unterstützt das .NETCF (.NET Compact Framework) als .NET (full-Framework), da nur eine Teilmenge implementiert.

Sie können dies auf der MSDN library sehen, wo nur eine der zehn Methodenüberladungen "Unterstützt von .NET Compact Framework" ist, angezeigt mit der kleinen Grafik eines PDA/Mobile.

CreateDelegate method

Das heißt, Sie haben Delegate.CreateDelegate(Type, Object, MethodInfo) in .NETCF zu verwenden.

Verwandte Themen