新版本的变更 / C# 4.0

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(34false'*');
        DrawBox(34 /* 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(34, 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
    }
}