2012-01-15 8 views
4

可能性の重複:問題をバージョン管理などのoptionalsの短所のほとんどは、オプションのパラメータは、単に過負荷に変換することによって対処することができているかのように
method overloading vs optional parameter in C# 4.0なぜC#でオプションのパラメータが同等のオーバーロードにコンパイルされていないのですか?

に思えます。技術的な理由は、C#のオプションのパラメータは、過負荷に軽減する方法で実装されていますか?

+0

これは、それが減少するオーバーロードは、まだ存在しないと言うのですか? –

+0

重複:http://stackoverflow.com/questions/3316402/method-overloading-vs-optional-parameter-in-c-sharp-4-0 http://stackoverflow.com/questions/251868/should-you -declare-methods-overloads-or-optional-parameters-in-c-sharp-4-0 – keyboardP

+1

これは良い点です。コンパイラは単にコンパイルエラーを投げることができます。つまり、オプションがオーバーロードに展開されているとみなし、存在する場合はオプションまたはメソッドを削除する必要があります。私は非常によく何かが欠けている可能性があります。 –

答えて

2

理由の1つは、コンパイラがオプションのパラメータを自動的にコンパイルしてオーバーロードにコンパイルすると、開発者が独自に定義する能力と競合するからです。たとえば、次のコードは合法です。

class Container { 

    public void Example(int x) { 
    ... 
    } 

    public void Example(int x, int y = 42) { 
    ... 
    } 
} 
+0

'Example(10、z:44)を呼び出すと'(10、42、44) 'と同じになる' public void Example(int x、int y = 42、int z = 43) 'ですか? 2つのパラメータだけでは、 'y'はデフォルト値に設定されますか? –

+3

そのコードが違法であるという完全な正当な理由があるようです。おそらくそれが合法的である理由よりもそうです! 'Container.Example(x)'を呼び出すとどうなるのかはすぐには分かりません。もちろん、私はこれがずっと前に作られた意思決定であることを認識しています。正しい答えはなく、決して変更されることはないので、質問は無意味です。 –

関連する問題