using System;
class Program {
static void DrawBox(int width, int height, bool filled = false,
char border = '#') {
Console.WriteLine(width + "x" + height + " filled=" + filled +
" border=" + border);
}
static void Main() {
// *** before: ***
// the meaning of a value at the call was guessed from the order or
// explained in a comment, and every skipped default had to be typed
DrawBox(3, 4, false, '*');
DrawBox(3, 4 /* height */);
// *** in version 4.0: ***
DrawBox(width: 3, height: 4, border: '*'); // filled keeps its default
DrawBox(height: 4, width: 3); // the order is free
DrawBox(3, 4, filled: true); // positional first, then named
// the NAME of the parameter becomes part of the contract: renaming
// it in a library breaks the callers that spell it out
}
}