İstanbul'un en iyi web tasarım firması


C# Polymorphism ( Çok Biçimlilik )

Polimorphism base class ta var olan bir özelliğin türemiş classa uygun şekilde dağıtılmasına denir.
Sınıflarımız arasında benzer tanımlamalar yapabiliriz bunun için sınıf içinde metodu virtual olarak tanımlayıp metodun gövdesi kalıtılmış sınıf içerisinde override anahtar sözcüğüyle ezilebilir.

Bir davranışı objenin ihtiyacına göre Overide ediyoruz.
 
Aşağıdaki örnekte Antivirüs programların çalışma şeklini ele aldım.
 
ÖRNEK 1:
 
abstract class Antivirus
    {
       public virtual void Baslat()
       {
 
       }
       public virtual void TaramayaDevam()
       {
           Console.WriteLine("Tarama devam ediyor...");
       }
       public virtual void Bitti()
       {
           Console.WriteLine("Tarama bitti..");
       }
       public virtual void Sonuc()
       {
 
       }
 
    }
class Kaspersky:Antivirus
    {
        public override void Baslat()
        {
            Console.WriteLine("Kaspersky taramaya başladı.");
        }
        public override void TaramayaDevam()
        {
            base.TaramayaDevam();
        }
        public override void Bitti()
        {
            base.Bitti();
        }
        public override void Sonuc()
        {
            Console.WriteLine("Kaspersky bilgisayarınızda güvenlik tehdidi bulamadı.");
        }
    }
class Nod32:Antivirus
    {
        public override void Baslat()
        {
            Console.WriteLine("Nod32 taramaya başladı.");
        }
        public override void TaramayaDevam()
        {
            base.TaramayaDevam();
        }
        public override void Bitti()
        {
            base.Bitti();
        }
        public override void Sonuc()
        {
            Console.WriteLine("Nod32 bilgisayarınızda güvenlik tehdidi bulamadı.");
        }
 
    }
 
class Program
    {
        static void Main(string[] args)
        {
            Kaspersky k = new Kaspersky();
            Nod32 n = new Nod32();
 
            Uygula(k);
            Console.WriteLine("************************************");
            Uygula(n);
        }
 
        public static void Uygula(Antivirus anti)
        {
            anti.Baslat();
            anti.TaramayaDevam();
            anti.Bitti();
            anti.Sonuc();
        }
    }
 
ÖRNEK 2:

Bu örnektede Tutarı ve Kdv oranını yazıp bize kdv hariç tutarı verecek. Yaz metodu içi boş yapıp diğer classlarda override edeceğimizden abstract method yapabiliriz. Dikkat !! Köşeli parantezler yok.
 
abstract class Urun
    {
       public double Hesapla(double Tutar, int kdv)
       {
           int topla = kdv + 100;
           double oran = Tutar / topla;
           return oran * 100;
       }
 
       public void Islet(double Tutar, int kdv)
       {
           double d = Hesapla(Tutar, kdv);
           yaz(d);
       }
 
       public abstract void yaz(double tutar);
 
    }
 
class Iphone:Urun
    {
        public override void yaz(double tutar)
        {
            Console.WriteLine("Iphone Kdv hariç fiyatı: {0}'dır",tutar);
        }
    }
class Kitap:Urun
    {
        public override void yaz(double tutar)
        {
            Console.WriteLine("Kitabın Kdv hariç fiyatı: {0}'dır.", tutar);
        }
 
    }
 
class Program
    {
        static void Main(string[] args)
        {
            Iphone hesapla = new Iphone();
            Urun u = new Iphone();
            u.Islet(649, 18);
 
            Kitap K = new Kitap();
            Urun U = new Kitap();
            U.Islet(649, 01);
        
        }
    }
 
 
Yazan:  Özgür Özmen
E-mail: ozgurozmentr@gmail.com
Tarih: 18.11.2008