2017-02-17 12 views
0

これは愚かな質問かもしれませんが、 デフォルトのパラメータのようなものがありますが、値ではなく名前であるかと思います。名前でC#のデフォルトパラメータがこれは可能ですか?

例:

私は私の方法の多くのパラメータ「IWebDriverドライバ」を使用する必要があります。私はいつも私はそれを使用するとき、私は "ドライバ"という名前を使用することを知っています - 名前の後ろにある "オブジェクト"は違うかもしれませんが(IE、FF、Chrome ..)、名前は常に同じです。

だから、これは関数に

public void CheckName(string nameToCheck, string expectedValue, IWebDriver driver = driver with name "driver") 
{ 
    some code.... 
} 

を持つことが可能であり、私が行うためにそれをしないで使用する場合:

CheckName("MyName", "MyName", driver) 

が、やって:

CheckName("MyName", "MyName") 

...とこのメソッドはname(文字列) "driver"でオブジェクトを取得する必要があることを認識しています。

私はちょうどそれを指定するには、デフォルト以外の名前を使用する場合:

CheckName("MyName", "MyName", driverOtherName) 
+0

複数の過負荷を追加しますか? –

+0

明示的に渡したくない場合、メソッドはドライバオブジェクトを取得します。より多くの情報を提供できますか? –

+0

私はあなたの質問を正しく理解している場合は、あなたの(オプションの)パラメータ値を格納する変数の名前をチェックしたいと思う。そして、それは不可能です。変数名(あなたのコードにはまったく意味がありません)は何でもかまいません。 –

答えて

2

いいえ、それを行う方法はありません。デフォルトのパラメータは定数値を持たなければなりません。ローカル変数から取った値に依存することはできません。あなたはおそらく、フィールド内のドライバの参照を格納し、インスタンスを作成する必要がありますように

ですね、あなたはただ、そのインスタンスのメソッドを呼び出すことができますし、それはフィールドの値を使用することができます。そして、

public class FooChecker 
{ 
    private readonly IWebDriver driver; 

    public FooChecker(IWebDriver driver) 
    { 
     this.driver = driver; 
    } 

    public void CheckName(string nameToCheck, string expectedValue) 
    { 
     // Use driver here 
    } 
} 

あなたは使用できます:

var checker = new FooChecker(driver); 
checker.CheckName("MyName", "MyName"); 
checker.CheckName("MyName2", "MyName2"); 
+0

デフォルトパラメータとして 'null 'を使用すると、' driver = driver ??メソッド内の「myLocalVariable」しかし、私はこれはOPの質問ではないと仮定します。 –

+0

@lukegvこれは、Jonが定数で意味することです。 – EpicKip

+0

クラスFooChecker(ドライバ)をTestという名前のNugetパッケージの一部にしたいのですか?これは "Test.FooChecker(ドライバ)を使用して"書くことが可能ですか? – Stanislava

関連する問題