2017-02-24 16 views
2

プライベートメソッドをC#インタラクティブウィンドウから実行するエスカモテージはありますか?私は、「プロジェクトを初期化インタラクティブ」をクリックすることができ、その後、私は以下のようにSayBye()メソッドにアクセスし、呼び出すことができますVisual StudioでC#インタラクティブウィンドウでプライベートメソッドを実行

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

:私はこのような単純なクラスがあると、ある

例:

> MyClass.SayBye() 
"Bye" 

SayHello()プライベートメソッドもありますか?これは、テスト目的での開発中に役立ちます。

答えて

1

書く> MyClass.SayHello()は実際にインタラクティブウィンドウで動作するかもしれませんが、試してみましたか?

もしそうでなければ、SayHelloを、通常のコード(リフレクション)で実行しようとしたのと同じ方法で実行することができます。あなたが結合フラグを変更し、メソッドがどこにあるかに応じて、メソッドのパラメータを起動する必要があります

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

:あなたは対話プロンプトに次のようになります何かを書くかもしれません。 (BindingFlags.InstanceBindingFlags.Staticなど)代替

インスタンスオブジェクト(静的でない)で作業している場合は、プライベートメンバーを公開しdynamicの魔法を使用してそこにいくつかの実装が存在します。 Google検索を行う場合は、これの実装を見つけることができます(または自分で書く)。あなたはこのようなコードを書くことができるようになる

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

あなたが作品を提案している何、ありがとうございました!しかしそれはあまり実用的ではありません。 私のような他の質問を読んだ後、私は自分のコードをリファクタリングしました。あなたのソリューションを例外的に使用します。ありがとうございます、g。 –

関連する問題