4

どうすればヌル色をメソッドに渡すことができるのだろうか。

以下は、色パラメーターを取得するメソッドの例です。

protected void myMethod(Color color,other parameters...) {}

現在、表示されている状態を使用しています。その状態次第で色を変えたいと思います。

if(1) {myMethod(Color.Red,....)}

if(2) {myMethod(Color.Black,...)}

if(3) {myMethod(Color.Ignore,...)} //so here just ignore this color parameter and keep the original.

私はこれを克服するために多くのことができることを知っていますが、私が言ったように、無視値を渡すより良い方法があるのではないかと思うので、要素の元の色を使用します.

4

7 に答える 7

10

どうですか:

protected void myMethod(Color? color,other parameters...) {}

どこの色?は null 許容であるため、代わりに null を渡して、メソッドで値を確認できます。color == null の場合、オリジナルを保持しますか?

于 2013-10-31T13:00:56.507 に答える
6

色を必要としないメソッドのオーバーロードを作成し、デフォルト値を使用する場合はそれを呼び出します (値をメソッドに渡すよりもメソッドで使用しない場合は、引数をまったく指定しない方がよいでしょうnull)。

protected void myMethod(other parameters...)

また、オプションのパラメーターをパラメーターの最後に配置することをお勧めします。

protected void myMethod(other parameters..,  Color color)

コード:

switch(value)
{
   case 1: myMethod(..., Color.Red); break;
   case 2: myMethod(..., Color.Black); break;
   case 3: myMethod(...); break;
}

コンパイラに「オーバーロード」を作成するように依頼することもできます (コメントを参照)。

protected void myMethod(other parameters..,  Color color = {DefaultColor})

: 紛らわしいコードは避けたいと思います。例: コール

DrawPoint(10, 20, null)

私には非常に混乱しているように見えます。とはnull? メソッドで誰も null を使用できないのに、なぜ null を渡すのですか? 次の呼び出しは見栄えが良くなります

DrawPoint(10, 20) 

使用されないパラメーターを渡すことで呼び出し元を台無しにしません。意味を考える必要はありませんnull。しかし、この場合でも、他の開発者にはまだ利用できない情報がいくつかわかっています。デフォルトの色でポイントを描画しており、メソッドはそれについて何も伝えていません。だから、私は別の方法を使用します

DrawPointWithDefaultColor(10, 20)

完全に混乱していません。

于 2013-10-31T13:00:43.087 に答える
2

カラーオブジェクトを取らないオーバーロードを単純に持つことができます:

protected void myMethod(Color color,other parameters...) {}

protected void myMethod(other parameters...) {}

また

color パラメーターを null 可能にします。これにより、null を渡すことができ、メソッド内で null チェックを行うことができます。

protected void myMethod(Color? color,other parameters...) {}
于 2013-10-31T13:01:32.910 に答える
1

は構造体 (値型) です。したがって、nullableを使用してこれを解決できます。

protected void MyMethod(Color? color, ...) {}
于 2013-10-31T13:01:09.480 に答える
0

null 許容の Color パラメーター、オプションのパラメーター、またはメソッドのオーバーロードを使用できます。ただし、すべてコードの匂いです。実際に行っているのは、次の 2 種類の API 機能を提供することです。

protected void MyMethodWithColorChange(...

protected void MyMethodKeepColorUnchanged(...

したがって、実行するさまざまな機能を説明する適切な名前を付けて、2 つのメソッドを作成します。

于 2013-10-31T13:16:13.087 に答える