Nesneye Dayalı Programlama 1 Öğretim Görevlisi Alper Talha KARADENİZ
Çok Biçimlilik (Polymorphizm) Nesne tabanlı programlama dillerinde çok biçimlilik aynı temel sınıftan türetilmiş olan yeni sınıflarda metotların farklı şekillerde davranabilmesidir.
public class A { public virtual void yaz() { Console public class A { public virtual void yaz() { Console.WriteLine("ana sınıf"); } } public class B:A public override void yaz() { Console.WriteLine("alt sınıf"); } static void Main(string[] args) B nesneB= new b(); nesneB.yaz();
örnek class Sekil { public double Boy; public double En; public Sekil(double boy, double en) /* kurulurken boy ve en değerlerini alan constructor yazdık */ { this.Boy = boy; /* base sınıfta sadece boş constructor olduğunda kullanılması yaygındır.*/ this.En = en; } public Sekil() { } virtual public double Alan() /*sanal alan metodu yazdık. türeyen sınıfta Alan() metodu varsa buradaki ezilecektir.*/ { return 0; } }
class Dortgen : Sekil /. sekil sınıfından dortgen sınıfını türettik class Dortgen : Sekil /* sekil sınıfından dortgen sınıfını türettik*/ { public Dortgen(int boy, int en) : base(/*boy,en*/) /* alınan değerleri türetilen sınıftaki değişkenlere gönderiyor. Base.Boy tanımlamamıza gerek olmuyor. */ /*eger base sınıfta (boy,en) constructorı yoksa bunu kullanamayız.*/ { base.Boy = boy; /* base sınıfta sadece boş constructor olduğunda kullanılması yaygındır.*/ base.En = en; } public override double Alan() /* eger kurulan sınıf dortgen olursa sekil sınıfındaki Alan() metodu yerine buradaki Alan() çağırılacak*/ { return En * Boy; } }
class Ucgen : Sekil { public Ucgen(int boy, int en) : base(boy, en) / class Ucgen : Sekil { public Ucgen(int boy, int en) : base(boy, en) /* eger base sınıfta (boy,en) constructorı yoksa bunu kullanamayız.*/ { } public override double Alan() /* eger kurulan sınıf dortgen olursa sekil sınıfındaki Alan() metodu yerine buradaki Alan() çağırılacak*/ { return En * Boy / 2; } }
class MainMetodu { public static void AlanBul(Sekil sekil) { Console class MainMetodu { public static void AlanBul(Sekil sekil) { Console.WriteLine("seklin alanı: " + sekil.Alan()); } static void Main() { Ucgen ucgen = new Ucgen(10, 50); AlanBul(ucgen); Dortgen dortgen = new Dortgen(10, 50); AlanBul(dortgen); Sekil sekil = new Sekil(10, 50); AlanBul(sekil); Console.ReadLine(); } }
Kaynaklar Öğr. Gör. Özgür Çiftçi Nesne Tabanlı Programlama Ders Notları