2017-02-24 73 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。 –