2013-05-17 7 views
9

、私はジェネリックデリゲートを生成するための方法を探しています元の質問です:ここでは .Net generate generic methods.NETジェネリックメソッド生成ここでコンパクトなフレームワーク

.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を入れようとしましたが、無効な引数例外が常に発生します。

アイデア?

+0

コンパクトプラットフォーム上の他の2つの引数に何か問題がありますか? –

+0

私はデスクトップの.NET上でこのように3つの引数を使って全く同じことを試しましたが、それはうまくいきました:Delegate delegate_ = Delegate.CreateDelegate(eventInfo.EventHandlerType、th​​is、genericPropertyChangedMethodInfo); –

+0

私は近くに見え、エラーは言った: "オープンジェネリックメソッドのReturnTypeはサポートされていません" ... hmmm –

答えて

1

サブセットのみであるように残念なことに.NETCF(.NET Compact Frameworkの)は、.NET(フルフレームワーク)と同様の方法署名をサポートしていません実装されました。

MSDN libraryでは、10個のメソッドオーバーロードのうち1つのみが「.NET Compact Frameworkによってサポートされています」(PDA /モバイルの小さなグラフィックで示されています)が表示されます。

CreateDelegate method

これは、あなたが.NETCFでDelegate.CreateDelegate(Type, Object, MethodInfo)を使用するを持っているを意味します。

関連する問題