C# 4.0 allows one to use named and optional parameters. Example:

int Calculate(int x = 1, int y = 2) { int someNumber = 0; //some algorithm to calculate return someNumber * y * x + 5 * 0.5; } 
One can call the method in multiple ways

int result = Calculate(1, 2); int result = Calculate(5); //value for x only, y is default to 2 int result = Calculate(); //value for x is 1 and y is 2 int result = Calculate(x: 123, y: 987); //named argument int result = Calculate(y: 345 x: 678); //named argument in reverse int result = Calculate(x: 123, 456); //compiler error not allowed position argument cannot follow name argument int result = Calculate(1, y: 456); //name argument can follow position argument 
Additional note, one cannot provide a gap in arguments. Example:

int Calculate(int x, int y = 2, int z) //invalid int Calculate(int x, int y = 1, int z= 5) //valid int result = Calculate(1, , 3); //invalid int result = Calculate(1, 8); //z takes the value of 5 as default 