1

私はこのユーザーコントロールを持っています:

public static Type typCreate;

LoadUserControl<T>()
{
   typCreate = typeof( T );
}

protected void ButtonCommand( object sender, CommandEventArgs e )
{
   x.Execute<typCreate>();
}

LoadUserControlメソッドがメイン メソッドであり、イベントが UserControl のボタンによって起動されることを考慮して、イベントButtonCommandでこのメソッドを呼び出そうとしています。

class x
{
   public static T Execute<T>() { ... }
}

VS によって表示されるエラーは、typeCreate は「フィールド」ですが、「タイプ」のように使用されていることを示しています。

どうすればこの作業を適切に行うことができますか?

前もって感謝します。

4

4 に答える 4

0

using System.Reflection;

private static readonly MethodInfo x_Execute_T = typeof(x).GetMethod("Execute", BindingFlags.Public | BindingFlags.Static);
private static readonly MethodInfo BuildExecute_T = typeof(LoadUserControl).GetMethod("BuildExecute", BindingFlags.NonPublic | BindingFlags.Static);
private readonly Func<object> x_Execute;

public static Type typCreate;

public LoadUserControl(Type t)
{
    typCreate = t;
    x_Execute = (Func<object>)BuildExecute_T.MakeGenericMethod(t).Invoke(null, null);
}

private static Func<object> BuildExecute<T>()
{
    return () => ((Func<T>)Delegate.CreateDelegate(typeof(Func<T>), x_Execute_T.MakeGenericMethod(typeof(T))))();
}

protected void ButtonCommand( object sender, object e )
{
   x_Execute();
}
于 2013-11-07T18:37:53.040 に答える
-1

すべての答えをありがとう。

リフレクションを使用して問題を解決します。

typeof( x ).GetMethod( "Execute" ).MakeGenericMethod( typCreate ).Invoke( this, new object[] { 'PARAM' } );

PARAMメソッドのパラメーターはどこにありますか。

于 2013-11-08T12:54:21.960 に答える