17

.Net 4.0 でオプションのパラメーターを利用し始めています

私が抱えている問題は、System.Drawing.Color のオプションのパラメーターを宣言しようとしたときです。

public myObject(int foo, string bar, Color rgb = Color.Transparent)
{
    // ....
}

Color.Transparent を rgb パラメータのデフォルト値にしたいです。問題は、次のコンパイル エラーが発生し続けることです。

'rgb' の既定のパラメーター値は、コンパイル時の定数でなければなりません

オプションのパラメーターにプリミティブ型しか使用できない場合、それは私の計画を本当に殺します。

4

4 に答える 4

25

このような状況では、null 許容値型を使用できます。

public class MyObject 
{
    public Color Rgb { get; private set; }

    public MyObject(int foo, string bar, Color? rgb = null) 
    { 
        this.Rgb = rgb ?? Color.Transparent;
        // .... 
    } 
}

ところで、これが必要な理由は、コンパイル中に呼び出しポイントでデフォルト値が入力され、static readonly実行時まで値が設定されないためです。(型初期化子による)

于 2010-08-06T03:32:50.863 に答える
3

私は、このような場合のオプションのパラメーターの大ファンではありません。IMO オプション パラメータの最適な使用例は、オプション パラメータがかなり使用される COM との相互運用性です。このような状況は、オプションのパラメーターが 4.0 まで言語に組み込まれなかった (私が推測するに) 理由の 1 つです。

オプションのパラメーターを作成する代わりに、次のように関数をオーバーロードします。

public myObject(int foo, string bar) : this (foo, bar, Color.Transparent) {};

public myObject(int foo, string bar, Color RGB) {
...
}
于 2010-08-06T02:48:37.537 に答える