簡體   English   中英

在C#交互式窗口中執行私有方法

[英]Execute private method in C# interactive window

是否存在任何escamotage從C#交互窗口執行私有方法?

也就是說,假設我有一個這樣的簡單類:

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

在Visual Studio中,我可以單擊“使用項目初始化交互”,然后我可以訪問並調用SayBye()方法,如下例所示:

> MyClass.SayBye()
"Bye"

有沒有辦法訪問SayHello()私有方法? 這在開發用於測試目的時是有用的。

寫作> MyClass.SayHello()可能實際上在交互式窗口中工作,你試過嗎?

如果沒有,您可以像嘗試通過普通代碼執行它一樣執行SayHello - 使用反射。 您可以在交互式提示中寫下看起來像這樣的內容:

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

您需要根據方法的位置更改綁定標志和Invoke方法參數。 BindingFlags.Instance vs BindingFlags.Static等)

替代

如果使用實例對象(不是靜態的),那里存在幾個使用dynamic魔法來暴露私有成員的實現。 如果您進行谷歌搜索,您可以找到這個的實現(或自己寫一個)。

這將允許您編寫如下代碼:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM