0

オプションのパラメータとしてプログレスバーをどのように宣言しますか?

関数は次のとおりです。

public int Factorial(int number, System.Windows.Forms.Label l, System.Windows.Forms.ProgressBar newprogressbar, int time=0)
    {

      ....

    }

この関数には4つのパラメーターがあります。intnumberとlabelのみlが必須です。 timeはすでにオプションですが、新しいプログレスバーをオプションにする方法がわかりません。この関数は数値の階乗を返し、ラベルを使用して数値を表示します。

プログレスバーにはスタックの状態が表示され、時間は関数が動作する速度である必要がありますが、これら2つはオプションである必要があります。

私はすでに機能を実行しましたが、プログレスバーをオプションにする方法を理解する必要があります。

4

2 に答える 2

3

他のパラメータをオプションとして宣言するのと同じ方法で、デフォルト値を指定します。ただし、デフォルト値string定数である必要があります。これは、基本的に以下を意味する以外の参照型の場合nullです。

public int Factorial(int number, Label l, ProgressBar newProgressBar = null,
                     int time = 0) {

ただし、個人的にはデザインを変更します。Factorial「階乗値の計算方法」と「進行状況の表示方法」の両方について知る代わりに、デリゲートを渡すことができます。

public int Factorial(int number, Action<int> progressAction, int time = 0) {

...次に、ループの各反復でその進行状況アクションを呼び出します(これは、進行状況バーで行うと私が想定していることです)。

これにより、関心の分離が向上します。すべての場合に進行状況を示したくない場合は、progressActionデフォルトをに設定できますnull

もう1つのオプションは、コントロールを完全に反転し、Factorial値のシーケンスと見なすことです。これを簡単に行うには、イテレーターブロックを使用します。

public IEnumerable<int> Factorial()
{
    for (...)
    {
        // Do work
        yield return currentValue;
    }
}

時間制限(パラメーターの目的は何であると思いますか?)を個別に課すことができtimeます。これにより、呼び出し元は、反復する回数と結果をどう処理するかを計算できます。このFactorialメソッドは、階乗数のシーケンスを生成する方法しか知りません。

于 2012-07-27T06:26:04.140 に答える
0

ProgressBarは最終的にSystem.Objectから派生するため、次のように記述できます。

public int Factorial(int number, System.Windows.Forms.Label l, 
    System.Windows.Forms.ProgressBar newprogressbar = null, int time=0)

メソッドが定義されているかどうかをチェックインするには、次のように記述します。

if (newprogressbar != null)
{
    // Do something with newprogressbar
}
于 2012-07-27T06:24:23.743 に答える