Jon Skeet said:
One of the problems is that default parameter values are hardcoded into
the calling assembly. If the called assembly (ie the one containing the
method with the optional parameters) changes the values for those
optional parameters, those changes aren't seen until the calling
assembly is recompiled.
Thats the big one. And the "bugs" I was refering to would be any change in
functionality due to that.
However there are a few other problems I had in mind as well. For example,
if default\optional parameters are defined and no one bothers to document
the actual default value(probably assuming the default value is document "in
code"), you could get code thats written in a different language that causes
unexpected results because their assumption of the meaning of default is
actually illegal or does something unexpected(say, Null, when it should have
been Class.EmptyInstance). Even if they are documented, a change ends up
requiring editing the project in those languages in all cases.
Overloads don't completely fix this, a change in default value can still
change behaviour, or the overload could be changed to have a different
meaning, but in properly written cases it shouldn't happen.
As a further annoyance, developers don't bother to provide overloads because
they have optional parameters, resulting in methods with a half dozen to a
dozen arguments that have to be filled out in other languages. That is
really rather annoying to C# developers,

, well, me atleast.