Aunque usted no lo crea C# no admite argumentos opcionales de métodos.

Tu te preguntaras como puedo pasar entonces argumentos opcionales a mis metodos, bueno C# aunque no admite eso, C# es capaz de soportar Sobrecarga de Funciones, Una sobre carga de funciones es cuando la misma funcion es declarada con diferentes argumentos y diferentes tipos de variables.

Ejemplo:

  1. public class Class1
  2. {
  3.     public Class1()
  4.     {
  5.         System.Console.WriteLine("Esta clase se Construyo sin ningun argumento enviado");
  6.     }
  7.     public Class1(int i)
  8.     {
  9.         System.Console.WriteLine(i);
  10.     }
  11.     public Class1(string p) {
  12.         System.Console.WriteLine(p);
  13.     }
  14. }

Como pueden darse cuenta la funcion abc esta declarada tres veces pero la primera sin argumentos, la segunda con un argumento tipo entero y la tercera con un argumento tipo String, lo que sucede al momento de llamar a esta funcion es que C# busca la funcion que mas se adapte al argumento enviado a la funcion.