Выполнить закрытый метод в интерактивном окне C#

Существует ли какой-либо escamotage для выполнения частного метода из интерактивного окна C#?

То есть предположим, что у меня есть простой класс, подобный этому:

public class MyClass
{
    private static string SayHello()
    {
        return "Hello";
    }
    public static string SayBye()
    {
        return "Bye";
    }
}

В Visual Studio я могу нажать на "Инициализировать Интерактив с проектом", а затем я могу получить доступ и позвонить SayBye() метод, как в следующем примере:

> MyClass.SayBye()
"Bye"

Есть ли способ получить доступ также SayHello() приватный метод? Это было бы полезно во время разработки для целей тестирования.

1 ответ

Решение

Пишу > MyClass.SayHello() может на самом деле работать в интерактивном окне, вы пробовали это?

Если это не так, вы можете выполнить SayHello Точно так же, как если бы вы пытались выполнить его с помощью обычного кода - с отражением. Вы можете написать что-то похожее на это в интерактивную подсказку:

typeof(MyClass)
  .GetMethod("SayHello", BindingFlags.NonPublic | BindingFlags.Static)
  .Invoke(null, new object[0]);

Вам нужно будет изменить флаги привязки и параметры метода Invoke в зависимости от того, где находится метод. (BindingFlags.Instance против BindingFlags.Static так далее)

Альтернативный:

При работе с экземпляром объекта (не статическим) существует несколько реализаций, использующих магию dynamic выставлять частных членов. Если вы делаете поиск в Google, вы можете найти реализацию этого (или написать самостоятельно).

Это позволит вам написать код так:

(new PrivateExposerObject(myClass)).SayHello();
Другие вопросы по тегам