9

ジェネリックデリゲートを生成する方法を探している元の質問は次のとおりです 。.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 メソッドには 3 番目のパラメーターが必要です...パラメーターの説明には次のように記載されています。

最初の引数、または「デリゲートがバインドされているオブジェクト」である必要があります。

そこに「obj」、「this」、およびnullを入れてみましたが、常に無効な引数の例外が発生します。

何か案は?

4

2 に答える 2

1

残念ながら、サブセットのみが実装されているため、.NETCF (.NET Compact Framework) は .NET (フル フレームワーク) と同じメソッド シグネチャをサポートしていません。

これは、10 個のメソッド オーバーロードのうち 1 つだけが「.NET Compact Framework でサポートされている」 MSDN ライブラリで確認でき、PDA/モバイルの小さなグラフィックで示されます。

CreateDelegate メソッド

これは、.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 に答える