在 C# 交互式中执行私有方法 window

Execute private method in C# interactive window

是否存在从 C# 交互式 window 中执行 private 方法的任何逃避程序?

也就是说,假设我有一个像这样的简单 class:

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

在 Visual studio 中,我可以单击 "Initialize Interactive with project",然后我可以访问并调用 SayBye() 方法,如下例所示:

> MyClass.SayBye()
"Bye"

还有什么方法可以访问 SayHello() 私有方法吗?这在出于测试目的的开发过程中很有用。

> MyClass.SayHello() 可能在交互式 window 中确实有效,你试过了吗?

如果没有,您可以执行 SayHello,就像您尝试通过普通代码执行它时一样 - 使用反射。您可能会在交互式提示中写入如下所示的内容:

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

您需要根据方法所在的位置更改绑定标志和调用方法参数。 (BindingFlags.Instance 对比 BindingFlags.Static 等)

候补:

如果使用实例对象(非静态),则存在几种使用 dynamic 的魔法公开私有成员的实现。如果你做一个 google 搜索你可以找到这个的实现(或者你自己写一个)。

这将允许您编写如下代码:

(new PrivateExposerObject(myClass)).SayHello();