1

名前でメソッドを呼び出そうとしています-次のように、aspxコードビハインドクラスの文字列として渡されます:

private void callMethod( string method ) {
    object classInstance = Activator.CreateInstance( this.GetType(), null );
    MethodInfo methodInfo = GetType().GetMethod( method );
    methodInfo.Invoke( classInstance, null );
}

しかし、メソッドは継承されたクラスにあり、このコードはメソッドを見つけることができません。誰か助けてくれませんか?

4

1 に答える 1

4

通話に追加BindingFlagsしてみてください。GetMethod()

たとえば、必要なメソッドが静的ではなくパブリックであると仮定します。

MethodInfo methodInfo = GetType().GetMethod( method, BindingFlags.Instance | BindingFlags.Public );

BindingFlagsここでは、とその可能な値に関する詳細情報を見つけることができます。

http://msdn.microsoft.com/en-us/library/system.reflection.bindingflags.aspx

これはドキュメントからです:

ノート

インスタンスまたは静的をパブリックまたは非パブリックとともに指定する必要があります。指定しないと、メンバーは返されません。

別の方法は、メソッドを照会することです。

MethodInfo methodInfo = GetType().GetMethods().FirstOrDefault(x => x.Name == method);

これはすべて、あなたが見つけているメソッドがパラメータなしであることを前提としています。パラメータがある場合は、その情報をGetMethod()orGetMethods()メソッドに追加する必要があります。ここにいくつかのドキュメントがあります:

http://msdn.microsoft.com/en-us/library/system.type.getmethod.aspx

http://msdn.microsoft.com/en-us/library/system.type.getmethods.aspx

最後に、そのシナリオでページクラスの新しいインスタンスを作成するのは少し奇妙に思えます。新しいインスタンスではなく、ページの現在のインスタンスに対してメソッドを実際に実行したい場合は、コードは次のようになります。

private void callMethod( string method ) {
    MethodInfo methodInfo = GetType().GetMethod( method );
    methodInfo.Invoke( this, null );
}

それが役に立てば幸い!

于 2012-10-20T15:20:19.027 に答える