26 Oca 2016

C#'ta Metot Overload, Opsiyonel Parametreler ve Params Kullanımı

Bir metodun proje içerisinde birden fazla kullanım şekli desteklemesi istenen durumlarda olabilir. Bu durumlarda overload'un yaşanmaması için metotlara gönderdiğimiz parametre sayılarının aynı olmamasına dikkat etmeliyiz. Yada metot veri tipini öncekinden farklı bir veri tipi olarak tanımlamalıyız.
Aşağıda bir ana program ve 3 tane aynı isimli metotdan oluşan bir program bulunmaktadır. Overload yaşanmaması için tüm bu metotlar ayrı parametre türü istemektedirler. Burada yaptığımız işlemin adı method overloading veya metodun türevlerini yazmak olarak isimlendirilebilir.
static void Main(string[] args)
        {
            Program ov = new Program(); //aşağıdaki metotlara erişebilmek için nesne türettik
            Console.WriteLine(ov.Ekle(3, 5)); //1.metot çalışır
            Console.WriteLine(ov.Ekle(3.0, 5.0)); //2.metot çalışır
            Console.WriteLine(ov.Ekle("3", "5")); //3.metot çalışır
            Console.ReadKey();
        }
        int Ekle(int no1, int no2)
        {
            return no1 + no2;
        }
        int Ekle(double no1, double no2)
        {
            return Ekle(Convert.ToInt32(no1), Convert.ToInt32(no2));
        }
        int Ekle(string no1, string no2)
        {
            int number1, number2;
            int.TryParse(no1, out number1);
            //number1 = Convert.ToInt32(no1);
            int.TryParse(no2, out number2);
            //number2 = Convert.ToInt32(no2);
            return Ekle(number1, number2);
        }
ÇIKTI:

Bir ana program (main) ile metotlar aynı Class içerisinde bulunuyorsa, ana programda o metotlara erişebilmek için 2 seçenek vardır.
1) Program nesneIsmi = new Program();  kullanarak yeni bir nesne türetmeliyiz ve o nesneIsmi'ni kullanarak metotlarımızı çağırmalıyız.
2) Metotlarımızı tanımlarken "static" olarak tanımlamalıyız. Bu durumda bir nesne türetmemize gerek olmayacaktır.
OPSİYONEL PARAMETRELER
Eğer aynı metoda opsiyonel parametre eklemek istiyorsak .NET 4.0'da gelen "optional parameters" özelliğinden faydalanabiliriz. Kullanım örneği;
int Ekle(int no1, int no2, int count = 1)
        {
            int sonuc = 0;
            for (int i = 0; i < count; i++)
            {
                sonuc = Ekle(sonuc, Ekle(no1, no2));
            }
            return sonuc;
        }
Yukarıdaki  metodu kullanırken ana programda Ekle(1,2) diyebiliriz bu durumda count = 1 olacak ve döngü bir kez çalışacaktır. sonuc = 8 olarak döndürülür. Metodu Ekle(1,2,5) olarak çağırırsak count değişkenini başta 1 olarak tanımlamamıza rağmen count'un yeni değeri 5 olacak ve döngü 5 kez çalışacaktır. sonuc'un değeri de 8x5'den 40 olacaktır. Bu metodun çağırılma kodu da aşağıdadır;
Console.WriteLine("4. Metot:  " + ov.Ekle(3, 5, 5));    //40
Console.WriteLine("4. Metot:  " + ov.Ekle(3, 5));       //8

PARAMS KULLANIMI
Overload işleminde daha eski bir kullanım da params ifadesi ile aynı tipte birçok metot parametresi geçmek şeklindedir. Kullanım şekli aşağıdadır;
int Ekle(params int[] sayilar)
        {
            int sonuc = 0;
            for (int i = 0; i < sayilar.Length; i++)
            {
                sonuc = Ekle(sonuc, sayilar[i]);
            }
            return sonuc;
        }
Bu metot ana programdan aşağıdaki gibi çağırılabilir;
Console.WriteLine(ov.Ekle(1, 2, 3, 4, 5, 6, 7, 8, 9));  //45
Görüldüğü gibi params int[] sayilar parametresi içeriye istediğimiz sayıda int değişken verebilmemizi sağlıyor.

Hiç yorum yok:

Yorum Gönder