C#の省略可能引数はビルド時に呼び出し側に値が埋め込まれるだけなので、この記事の「省略可能引数を追加する」のような問題が起きます。
http://qiita.com/chocolamint/items/f04665ce2db211abb2d2
なぜC#の省略可能引数は、内部的にオーバーロード関数を自動生成するのではなく、呼び出し側に値が埋め込むといった実現方法になっているのでしょうか。
バイナリレベルで互換性を保つためではないでしょうか
関数が別DLLの場合など。
あと既存のVB.NETで作成されたDLL(=DefaultValueAttributeが付いた関数)
をビルドし直さずにそのまま使うという理由もあるかと思われます。
こちらこそ説明が不足しておりました。
ありがとうございます。
以下のような関数自動生成を想定しています。
// 記述コード
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); }
}
あと既存のVB.NETで作成されたDLL(=DefaultValueAttributeが付いた関数)
2015/08/22 15:23:15をビルドし直さずにそのまま使うという理由もあるかと思われます。
こちらこそ説明が不足しておりました。
2015/08/22 18:34:55ありがとうございます。