2017-02-24 61 views
2

是否存在任何诡计以执行私有方法从C#交互式窗口中执行?在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]); 

你需要更改绑定的标志,并调用不同的地方的方法是方法的参数。 (BindingFlags.Instance VS BindingFlags.Static等)

备用

如果用一个实例对象(而不是静态)工作,存在几种实现在那里它们使用的dynamic魔术暴露私有成员。如果你做谷歌搜索,你可以找到这个实现(或自己写一个)。

这将使你写这样的代码:

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

你打算什么作品,谢谢!但这不是很实际。 在阅读了类似于我的其他问题后,我重构了我的代码,并且我将使用您的解决方案。 谢谢,g。 –