2013-05-17 15 views
9

Ecco la domanda iniziale in cui sto cercando un modo per generare un delegato generico: .Net generate generic methods.NET generare metodo generico - compact framework

Ecco il codice per generare un delegato generico nel .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) 
{ 
} 

questo funziona in .NET 3.5, ma ora quando ho cercato di porta per il compact framework 3.5, il metodo Delegate.CreateDelegate richiede un terzo parametro ... la descrizione dei parametri dice:

dovrebbe essere il primo argomento, o "l'oggetto al quale è associato il delegato ".

Ho provato a mettere 'obj' in là, e 'this', e null, e ottengo sempre un'eccezione di argomento non valido.

Qualche idea?

+0

Potrebbe essere che ci sia qualcosa di sbagliato con gli altri due argomenti sulla piattaforma compatta? –

+0

Ho provato la stessa identica cosa con tre argomenti come questo sul desktop .NET e ha funzionato: Delegato delegate_ = Delegate.CreateDelegate (eventInfo.EventHandlerType, this, genericPropertyChangedMethodInfo); –

+0

Ho guardato più da vicino e l'errore ha detto: "ReturnType per i metodi Open Generic non è supportato" ... hmmm –

risposta

1

Purtroppo .NetCF (.NET Compact Framework) non supporta gli stessi metodi firme come .NET (framework completo) come solo un sottoinsieme è implementato.

Lo si può vedere su MSDN library dove solo uno dei dieci overload di metodo è "Supportato da .NET Compact Framework", indicato con la grafica piccola di un PDA/mobile.

CreateDelegate method

Questo significa che dovete usare Delegate.CreateDelegate(Type, Object, MethodInfo) in .NetCF.

Problemi correlati