Bu yazımda sizlere metodlarda opsiyonel parametrelerin nasıl tanımlandığından ve nasıl kullanıldığından bahsediceğim. Opsiyonel parametrelerin normal parametrelerden farkı, metodumuzu çağırırken yazılmadıkları zaman build esnasında hata oluşturmamalarıdır. Aşağıdaki gibi opsiyonal parametre içerin GenelToplam adında bir metodumuz olsun.

public double GenelToplam(double[] miktar, bool kdv = false)
{
    double toplam = 0;
    foreach (var d in miktar)
    {
        toplam += d;
    }
    if (kdv)
    {
        toplam *= 1.18;
    }
    return toplam;
}

Yukarıdaki tanımlamada metodumuzu tanımlarken, tanımladığımız parametrelere başlangıç değeri verirsek artık o parametre opsiyonel olarak kullanabiliriz.
Kullanış şekli aşağıdaki gibidir.

private void button1_Click(object sender, EventArgs e)
{
    double[] miktar = {56.33, 35.66, 78.25, 50.00, 100.21};
    //Aşağıdaki gibi kdv parametresini çağırmadan gönderebiliyoruz.
    //Bu şekilde gönderdiğimiz kdv parametresi tanımlarken verdiğimiz varsayılan değer olarak false değerini alacaktır.
    MessageBox.Show(GenelToplam(miktar).ToString());
    //Aşağıdaki şekilde ise kdv parametresini kullanarak çağırdığımızda bize kdv li tutarı döndürecektir.
    MessageBox.Show(GenelToplam(miktar, true).ToString());
}

Kdv parametremiz opsiyonel olduğu için metodumuzu çağırken parametremizi göndermediğimizde build esnasında hata oluşmayacak ve methodumuz başarıyla çalışacaktır.
Birden fazla opsiyonel parametre olduğunda ise aşağıdaki gibi kullanabiliyoruz.

public double GenelToplam(double[] miktar, bool kdv = false,bool ötv = false,double diger=1)
{
    double toplam = 0;
    foreach (var d in miktar)
    {
        toplam += d;
    }
    if (kdv)
    {
        toplam *= 1.18;
    }
    if (ötv)
    {
        toplam *= 1.25;
    }
    toplam *= diger;
    return toplam;
}

Metodumuz aşağıdaki gibi değişik şekillerde çağırabiliriz.

private void button1_Click(object sender, EventArgs e)
{
    double[] miktar = {56.33, 35.66, 78.25, 50.00, 100.21};
    //Aşağıdaki gibi parametre isimlerini vererek çağırabiliriz.
    MessageBox.Show(GenelToplam(miktar,diger:1.50,kdv:true).ToString());
    MessageBox.Show(GenelToplam(miktar, diger: 1.50, ötv: true,kdv:true).ToString());
    MessageBox.Show(GenelToplam(miktar, ötv:true, diger:1.05).ToString());
    //Eğerki isim vermeden kullanmak istiyorsak. Parametreleri metodun tanımlama sırasına 
    //göre göndermeliyiz. İlki kdv,ikinci ötv,üçüncü diger şeklinde.
    MessageBox.Show(GenelToplam(miktar,true,true,1.15).ToString());
}