Val
Val

Reputation: 639

Access to private method using reflection in C#/Silverlight applications

My code invokes method using reflection:

        scoringType.InvokeMember("scoringClient_ScorePostsCompleted",
            BindingFlags.InvokeMethod | BindingFlags.Instance | BindingFlags.NonPublic,
            null, scoringInstance,
            new object[] { sArg, eArg });

where scoringInstance is an instance of a ModelView class. The method is private, but I use BindingFlags.NonPublic, so, i should be able to access it, but I cannot - I get MethodAccessException exception: "Attempt by method ... to access method ... failed." Google doesnt seem to have an answer. Do you have any idea how to fix it by any chance?

Upvotes: 7

Views: 2869

Answers (2)

Vyacheslav Volkov
Vyacheslav Volkov

Reputation: 4742

If you need access to non-public members, you can do this using the LambdaExpression. I wrote this article that explains in detail why it works.

Upvotes: 3

MerickOWA
MerickOWA

Reputation: 7592

From MSDN on silverlight

In Silverlight, you cannot use reflection to access private types and members. If the access level of a type or member would prevent you from accessing it in statically compiled code, you cannot access it dynamically by using reflection.

Edit:

Silverlight 5 now does allow for reflection of private members ONLY if you're running with elevated privileges either out-of-browser or in-browser (in-browser using the generated test page DOES NOT WORK).

Upvotes: 11

Related Questions