Выполнить закрытый метод в интерактивном окне 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();