なぜC#の省略可能引数は、オーバーロードのシンタックスシュガーではないのでしょうか?


C#の省略可能引数はビルド時に呼び出し側に値が埋め込まれるだけなので、この記事の「省略可能引数を追加する」のような問題が起きます。
http://qiita.com/chocolamint/items/f04665ce2db211abb2d2

なぜC#の省略可能引数は、内部的にオーバーロード関数を自動生成するのではなく、呼び出し側に値が埋め込むといった実現方法になっているのでしょうか。

回答の条件
  • 1人1回まで
  • 登録:
  • 終了:2015/08/27 23:14:41
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:degucho No.1

回答回数281ベストアンサー獲得回数75

ポイント100pt

バイナリレベルで互換性を保つためではないでしょうか
関数が別DLLの場合など。

他4件のコメントを見る
id:degucho

あと既存のVB.NETで作成されたDLL(=DefaultValueAttributeが付いた関数)
をビルドし直さずにそのまま使うという理由もあるかと思われます。

2015/08/22 15:23:15
id:ku__ra__ge

こちらこそ説明が不足しておりました。
ありがとうございます。

2015/08/22 18:34:55

その他の回答0件)

id:degucho No.1

回答回数281ベストアンサー獲得回数75ここでベストアンサー

ポイント100pt

バイナリレベルで互換性を保つためではないでしょうか
関数が別DLLの場合など。

他4件のコメントを見る
id:degucho

あと既存のVB.NETで作成されたDLL(=DefaultValueAttributeが付いた関数)
をビルドし直さずにそのまま使うという理由もあるかと思われます。

2015/08/22 15:23:15
id:ku__ra__ge

こちらこそ説明が不足しておりました。
ありがとうございます。

2015/08/22 18:34:55
id:ku__ra__ge

以下のような関数自動生成を想定しています。

// 記述コード

class OptionalArgument {

int func (int a, int b, int c = 1) { return a + b + c; }

}

// 自動生成結果

class OptionalArgument {

int func (int a, int b, int c) { return a + b + c; }

int func (int a, int b) { func(a, b, 1); }

}

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません