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 |