POLYMORPHISM (ÇOK BİÇİMLİLİK) NEDİR NASIL KULLANILIR?

POLYMORPHISM (ÇOK BİÇİMLİLİK) NEDİR NASIL KULLANILIR?

Alt sınıf türetildiği ana sınıfa ait tüm özellikleri alır. Ana sınıf ne yapıyor ise türetilen alt
sınıfta bu işlemlerin aynısını yapabilir ve alt sınıfların kendisine ait birçok özelliği de bulunur.
Türetilen alt sınıfa ait nesnenin ana sınıf tipindeki referansa bağlama işlemine upcasting (yukarı
doğru) denir.

POLYMORPHISM (ÇOK BİÇİMLİLİK) NEDİR NASIL KULLANILIR?
override ► farklı cla ss’larda aynı metot yapısı ile kalıtım yapılması.
overload ► farklı parametre()

ÖRNEK:

bankahesabı:
cekhesabı
mevduathesabı
sirkethesabı
bankahesabı ba1,ba2 = new bankahesabı("ahmet",250,7);
sirkethesabı sa1,sa2 = new sirkethesabı ("kastelli",350,8);
ba1 = sa2; //upcasting //run(çalışır)
sa1 = ba2; //downcasting //not run //discover at compile time
sa1 = (sirkethesabı)ba2; //downcasting //not run //discover at run time
sa1 = (sirkethesabı)ba1; //downcasting //run //ba1 already refers to sirkethesabı

1. Compile time Polymorphism
-> Compile time ► early binding, overloading, static binding

using System;

namespace 7_10_2020 {
  class Asker {
    public void selamVer()
    Console.WriteLine("Asker Sınıfı Selam Verdi");
  }
}
class Er: Asker {
  public void selamVer(); {
    Console.WriteLine("Er Sınıfı Selam Verdi");
  }
}
class Yuzbasi: Asker {
  public void selamVer() {
    Console.WriteLine("Yuzbasi Sınıfı Selam Verdi");
  }
}
class Program {
  public static void hazirOl(Asker a) {
    a.selamVer();
  }
  static void Main(string[] args) {
    Asker a = new Asker();
    Er e = new Er();
    Yuzbasi y = new Yuzbasi();
    hazirOl(a); //ana sınıf olduğu için upcasting veya downcasting yok.
    hazirOl(e); //upcasting
    hazirOl(y); //upcasting
    Console.ReadKey();
  }
}
}
using System;

namespace _7_10_2020 {
  public class Class1 {
    public void SayiEkleme(int a, int b) {
      Console.WriteLine(a + b);
    }
    public void SayiEkleme(int a, int b, int c) {
      Console.WriteLine(a + b + c);
    }
  }
}

2. Run time Polymorphism

-> Runtime ► late binding, overriding, dynamic binding

using System;

namespace _12_10_2016 {
  public class Bclass {
    public virtual void Sample1() {
      Console.WriteLine("base class");
    }
  }
  public class Dclass: Bclass {
    public override void Sample1() {
      //base.Sample1();
      Console.WriteLine("Derived Class");
    }
  }
  class Program {
    static void Main()
  {
  //override edilen methodun çağrılması
  Dclass dc = new Dclass();
  dc.Sample1();
  //base class methodunun çağrılması
  Bclass bc = new Bclass();
  bc.Sample1();
  }
 }
}
// late binding, override, dynamic binding, at run time

Örnekler

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ___ {
  class Hayvan {
    public virtual void Yakala() {
      Console.WriteLine("Hayvan sınıfı av yakaladı");
    }
  }
  class Kartal: Hayvan {
    public override void Yakala() {
      Console.WriteLine("Kartal sınıfı av yakaladı");
    }
  }
  class Timsah: Hayvan {
    public override void Yakala() {
      Console.WriteLine("Timsah sınıfı av yakaladı");
    }
  }
  class PolyOrnek {
    static Random rnd = new Random();
    public static Hayvan rastgeleSec() {
      int sec = ((int)(rnd.Next()));
      Hayvan h = null;
      if (sec == ) h = new Hayvan();
      if (sec == ) h = new Kartal();
      if (sec == ) h = new Timsah();
      return h;

    }
    static void Main() {
      Hayvan[] h = new Hayvan[];
      //diziyi doldur
      for (int i = ; i < ; i++) {
        h[i] = rastgeleSec(); //upcasting
      }
      //diziyi ekrana bas
      for (int j = 0; j < 3; j++) {
  h[j].Yakala(); //dikkat run time
      }
Console.ReadKey();
     }
  }
}

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir