Metotları aşırı yüklemek, aynı isimde fakat imzaları farklı metotlar tanımlayabilmemiz anlamına gelir. Metotların imzaları, aldıkları parametre tipleri ve sayıları ile ilişkilidir. Aşırı yüklenmiş metotlar çağrılırken, gönderilen parametreye göre hangi versiyonun çalışacağına karar verilir.

.Net framework içerisinde aşırı yüklenmiş bir çok metot bulunmaktadır. Consol uygulamalarında sıkça kullandığımız WriteLine metodunun 19 farklı versiyonu bulunmaktadır.

image

Bu 19 versiyonun hepsi geriye void dönerken, aldıkları parametre tipleri veya sayıları değişmektedir.

NOT: Metodun geri dönüş tipi, imzasını etkileyen faktörlerden biri değildir!

Aşağıda bir metodu nasıl  aşırı yükleyebileceğimiz ile ilgili bir kod örneği mevcuttur.

class Program

    {

        static void Main(string[] args)

        {

            AsiriYuklenmisMetot(5);

            AsiriYuklenmisMetot("test");

            AsiriYuklenmisMetot(new SqlConnection());

            AsiriYuklenmisMetot(10, new object());

            Console.WriteLine("Toplam : {0}", AsiriYuklenmisMetot(5, 10, 40));

        }

 

        static void AsiriYuklenmisMetot(int p1)

        {

            Console.WriteLine("{0} tipinde parametre alırım", p1.GetType().ToString());

        }

 

        static void AsiriYuklenmisMetot(string p1)

        {

            Console.WriteLine("{0} tipinde parametre alırım", p1.GetType().ToString());

        }

 

        static void AsiriYuklenmisMetot(SqlConnection p1)

        {

            Console.WriteLine("{0} tipinde parametre alırım", p1.GetType().ToString());

        }

 

        static void AsiriYuklenmisMetot(int p1, object p2)

        {

            Console.WriteLine("{0} ve {1} tipinde parametre alırım", p1.GetType().ToString(), p2.GetType().ToString());

        }

 

        static int AsiriYuklenmisMetot(int p1, int p2, int p3)

        {

            int toplam = p1 + p2 + p3;

            return toplam;

        }

    }

Programı çalıştırdığımızda alacağımız ekran görüntüsü şu şekildedir.

image

SIkça karşılaştığımız senaryolardan biri de, constructor(yapıcı) metotların aşırı yüklenmesi durumudur. Bir nesne örnekleyeceğimiz zaman, yapacağımız ilk değer atamaları farklılık gösterebilir.

Urun adında bir sınıf yazalım ve yapıcı metodunu aşırı yükleyelim.

class Urun

    {

        public int Id { get; set; }

        public string Ad { get; set; }

        public double Fiyat { get; set; }

    }

Bir sınıfa yapıcı metot yazmassak, arka tarafta parametre almayan bir yapıcı metot default olarak tanımlanır. Parametre alan bir yapıcı metot tanımı yaptığımızda, arka tarafta default olarak bir yapıcı metot tanımı yapılmaz.

class Urun

    {

        public int Id { get; set; }

        public string Ad { get; set; }

        public double Fiyat { get; set; }

 

        public Urun(int id, string ad, double fiyat)

        {

            Id = id;

            Ad = ad;

            Fiyat = fiyat;

        }

 

        public Urun(int id, double fiyat)

        {

            Id = id;

            Fiyat = fiyat;

            Ad = "isimsiz";

        }

 

        public Urun()

        {

            // Bu versiyonu tanımlamassak Urun u=new Urun(); gibi bir nesne örnekleme yapamayız.

        }

    }

Main metodu içerisinde Urun tipinden nesneler örnekleyelim.

class Program

    {

        static void Main(string[] args)

        {

            Urun u = new Urun();

 

            Urun u2 = new Urun(1, "Monitör", 200);

            Console.WriteLine(u2.Ad);

 

            Urun u3 = new Urun(2, 45);

            Console.WriteLine(u3.Ad);

        }

    }

Ekran çıktısı aşağıdaki gibi olacaktır.

image



2 yorum:

Soner Gönül dedi ki...

Teşekkürler. Ben de bu konu ile ilgili bir makale yayınlamıştım. http://sonergonul.net/?p=73

Adsız dedi ki...

güzel

Yorum Gönder