2 вещи:
1) параметры по умолчанию слева направо, после того, как вы начнете задавать параметры по умолчанию, после них вы не сможете использовать значения по умолчанию, поэтому f
должно иметь значение по умолчанию (в вашем примере)
2) вы можете использовать именование параметров, чтобы пропустить параметр по умолчанию:
var f1 = new Foo(5, 9, e: 9, f: 10);
Это дает a = 5, b = 9, c = значение по умолчанию, d= по умолчанию, e = по умолчанию, f = 10
При условии, что вы используете компилятор C # 4.0, конечно ...