I'd suggest not using optional parameters at all and use overloading instead, which you have to do in this case. I guess the advantage of optional parameters is that the caller can provide none, any or all of the arguments with values, whereas with overloading you have to define the specific combinations. In this case I'd declare one overload with no colours and one with all three.