Merhabalar bu yazımda, geçen yazımda bahsettiğim aşırı yükleme (overloading) işlemi yerine kullanılabilecek bir konuya değineceğim. İsteğe bağlı ya da opsiyonel parametreler, daha önceden metotla birlikte tanımlanan, bir başlangıç değerine sahip olan parametrelerdir. Eğer metodu çağırırken parametrenin varsayılan değerini kullanmak istiyorsak herhangi bir değer göndermek zorunda değiliz.
Kullanımı aşağıdaki gibidir:
static void otomobil(int kapi, int motor = 2000, string isim = ”Mercedes”) {
}
Örneğimize baktığımızda ilk parametre ilk değere sahip değilken, diğer iki parametre ilk değerlerini almış durumdadır. Mesela biz bu metodu çağırırken:
otomobil(4); şeklinde veya otomobil(4, 1000); şeklinde kullanabiliriz.
İsteğe bağlı parametreler zorunlu parametrelerin her zaman sağında tanımlanır. Onlar tanımlandıktan sonra sağına zorunlu parametre tanımlanması mümkün değildir. Bu esnek kullanım nedeniyle isteğe bağlı argümanlar aşırı yüklemenin kısa yolu olarak ta değerlendirilebilir.
Şimdi bir örnek üzerinde ayrıntılı inceleyelim:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
class Parametre { // Aşırı yüklenme durumunu kullndığımız zaman yazmamız gereken metotlar /* static void Otomobil(string marka, int kapi, int motor) * static void Otomobil(string marka, int kapi) * static void Otomobil(string marka) * * Eğer isteğe bağlı argümanları kullanmadan yapmak isteseydik, yukarıda olduğu * gibi aşırı yükleme yapmak için metodu 3 defa çağırmak zorunda kalacaktık. * İsteğe bağlı argümanlar ile tek metotda farklı parametreler alan * 3 metotu oluşturmuş olduk. */ // İsteğe bağlı parametre kullanıdğımız metotlara aşırı yüklenme yapılırsa belirsizlik oluşabilir. /* * static void Otomobil(string marka, int kapi = 4, int motor = 2000) * static void Otomobil(string marka, long kapi = 4, double motor = 2000) * * Bu şekilde tanımlanan otomobil metodunu çağırdığımız zaman * Otomobil(4); * derleyici hangi metodu kullanmak istediğinizi anlamaycaktır. * Çünkü 4 sayısı int veya long değer tipinden herhangi birini kastediyor olabilir. */ // İsteğe bağlı iki parametre kullandık static void Otomobil(string marka, int kapi = 4, int motor = 2000) { Console.WriteLine("Arabanın markası: " + marka + " " + "Kapı sayısı: " + kapi + " " + "Motor Gücü: " + motor); } static void Main() { // Argümanların hepsini biz gönderdik Otomobil("Audi", 2, 3000); // Yalnızca kapı sayısını gönderdik motor gücü varsayılan değer olacak Otomobil("Mercedes", 2); // Varsayılan paramerelerin hepsini kullanmış olduk Otomobil("Audi"); } } |