-1

プライベートメソッドを使用できるように以下のコードを変更したい

        //use reflection to Load the data
    var method =
                    typeof(MemberDataFactory)
                    .GetMethod("LoadData")
                    .MakeGenericMethod(new [] { data.GetType() })
                    .Invoke(this, null);

私は運が悪かったので次のことを試みました:

        //use reflection to Load the data
    var method =
                    typeof(MemberDataFactory)
                    .GetMethod("LoadData")
                    .MakeGenericMethod(new [] { data.GetType() })
                    .Invoke(this, BindingFlags.Instance | BindingFlags.NonPublic, null , null, null);

また、このコードの観点から「var」とは何ですか?varを使用する代わりに、そのタイプを指定することをお勧めします。

ありがとう!

4

1 に答える 1

3

バインディングフラグを渡す場所である、のこのオーバーロードを使用する必要があります。Type.GetMethod()デフォルト.GetMethod(string)ではパブリックメソッドのみが検索されるため、nullが返されるため、null参照例外が返されます。

コードは次のようになります。

var method =
        typeof(MemberDataFactory)
        .GetMethod("LoadData", BindingFlags.Instance | BindingFlags.NonPublic) // binding flags go here
        ...
于 2012-09-01T17:55:17.427 に答える