Доступ к приватному методу с использованием отражения в приложениях C # / Silverlight - PullRequest
7 голосов
/ 02 сентября 2011

Мой код вызывает метод, используя отражение:

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

где scoringInstance - это экземпляр класса ModelView. Этот метод является закрытым, но я использую BindingFlags.NonPublic, поэтому я должен иметь возможность получить к нему доступ, но не могу - я получаю исключение MethodAccessException: «Попытка с помощью метода ... для доступа к методу ... не удалась». У Google, похоже, нет ответа. У вас есть идеи, как это исправить?

Ответы [ 2 ]

11 голосов
/ 02 сентября 2011

От MSDN на серебряном свете

В Silverlight нельзя использовать отражение для доступа к закрытым типам и члены. Если уровень доступа типа или члена помешает вам от доступа к нему в статически скомпилированном коде, вы не можете получить к нему доступ динамически с помощью отражения.

Edit:

Silverlight 5 теперь позволяет отображать личные элементы ТОЛЬКО, если вы работаете с повышенными привилегиями вне браузера или в браузере (в браузере, использующем созданную тестовую страницу, НЕ РАБОТАЕТ).

2 голосов
/ 21 марта 2013

Если вам нужен доступ к закрытым участникам, вы можете сделать это, используя LambdaExpression .Я написал эту статью , в которой подробно объясняется, почему она работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...