c# - 在C#交互窗口中执行私有(private)方法

标签 c# private c#-interactive

是否存在从 C# 交互窗口执行私有(private) 方法的任何逃逸?

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

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() 私有(private)方法吗?这在出于测试目的的开发过程中很有用。

最佳答案

编写 > MyClass.SayHello() 可能实际上在交互窗口中有效,你试过了吗?

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

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

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

备用:

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

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

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

关于c# - 在C#交互窗口中执行私有(private)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42434400/

相关文章:

visual-studio - 如何在 C# 交互中使用 .NET Core?

c# - 在 C# 中,有没有一种方法可以在不先加载 XML 节点的情况下将其添加到磁盘上的文件中?

C# Visual Studio 截断 INSERT 查询中的字符串参数

c# - 解决方案中的文件夹是否应该与命名空间相匹配?

c++ - 错误的私有(private)基类无法访问?

c# - 调用私有(private)方法保留调用栈

c++ - 我必须将数据设为私有(private)吗?

c# - 是否可以像 Immediate 那样在 C# Interactive (REPL) 中自动输出值?

c# - C# 中的 WPF 交互式 (csi.exe)

c# - EntityTypeBuilder 不包含 'Navigation' 的定义