Polimorfizm (Polymorphism) bir nesnenin farklı durumlarda farklı davranışlar sergileme yeteneğidir (“çok biçimli”).
Farklı Türdeki Nesneleri Ortak Bir Arayüzle Kullanma: Aynı metot çağrısının, nesnenin türüne göre farklı sonuçlar vermesini sağlamak.
Kod Esnekliği ve Genişletilebilirlik: Yeni nesne türleri ekleyerek mevcut kodu değiştirmeden genişletebiliriz.
Örneğin: SesCikar() metodu, Hayvan, Kedi, Köpek sınıflarında farklı davranışlar sergileyebilir (Miyavlama, Havlama vb.).
Metot Aşırı Yükleme (Method Overloading): Aynı İsimde Farklı Parametre Sayısına Sahip Metotlar
- Metot Aşırı Yüklemenin Tanımı: Bir sınıfta aynı isimde fakat farklı parametre listelerine sahip birden fazla metot tanımlamak.
- Kullanım Alanları: Aynı işlevi farklı veri türleriyle veya farklı sayıda parametreyle gerçekleştirmek için kullanılır.
public class HesapMakinesi
{
public int Topla(int a, int b)
{
return a + b;
}
public double Topla(double a, double b)
{
return a + b;
}
public int Topla(int a, int b, int c)
{
return a + b + c;
}
}Sanal Metotlar (Virtual Methods) ve Soyut Sınıflar (Abstract Classes): Polimorfizme Giriş
- Sanal Metotlar: Temel sınıfta virtual anahtar kelimesiyle tanımlanan metotlardır. Türetilmiş sınıflarda geçersiz kılınabilirler.
- Soyut Sınıflar: En az bir sanal metodu olan sınıflardır. Soyut sınıflardan nesne oluşturulamaz, sadece türetilmiş sınıfları kullanılabilir. abstract anahtar kelimesiyle tanımlanır.
public abstract class Sekil // Soyut Sınıf
{
public abstract double AlanHesapla(); // Sanal Metot
public virtual void Ciz()
{
Console.WriteLine("Şekil çiziliyor.");
}
}Arayüzler (Interfaces): Çoklu Kalıtım’a Alternatif Çözüm
- Arayüzlerin Tanımı: Sınıfların sahip olması gereken metotları ve özellikleri tanımlayan bir sözleşmedir. interface anahtar kelimesiyle tanımlanır.
- Çoklu Kalıtım’a Alternatif: C# çoklu kalıtımı desteklemez, ancak arayüzler aracılığıyla birden fazla davranışsal özelliği bir sınıfa ekleyebiliriz.
public interface IKonusabilir // Arayüz
{
void Konus();
}
public interface IUçabilir // Arayüz
{
void Uç();
}
public class Kus : IKonusabilir, IUçabilir // Birden fazla arayüzü uyguluyor
{
public void Konus()
{
Console.WriteLine("Miyav!");
}
public void Uç()
{
Console.WriteLine("Kuş uçuyor.");
}
}Polimorfizm Uygulamaları: Nesne Dizileri ve Koleksiyonları ile Polimorfik Davranış
- Nesne Dizileri: Farklı türdeki nesneleri aynı dizide saklayabiliriz (temel sınıf türünde).
- Polimorfik Davranış: Aynı metot çağrısının, nesnenin gerçek türüne göre farklı sonuçlar vermesi.
public class Hayvan // Temel Sınıf
{
public virtual void SesCikar()
{
Console.WriteLine("Hayvan sesi çıkardı.");
}
}
public class Kedi : Hayvan
{
public override void SesCikar()
{
Console.WriteLine("Miyav!");
}
}
public class Köpek : Hayvan
{
public override void SesCikar()
{
Console.WriteLine("Hav Hav!");
}
}
// ... Main metodunda nesne dizisi oluşturma ve polimorfik davranış gösterme ...
Hayvan[] hayvanlar = new Hayvan[3];
hayvanlar[0] = new Kedi();
hayvanlar[1] = new Köpek();
hayvanlar[2] = new Hayvan();
foreach (Hayvan hayvan in hayvanlar)
{
hayvan.SesCikar(); // Her nesne kendi türüne göre ses çıkarır!
}Kaynak: https://learn.microsoft.com/tr-tr/dotnet/csharp/tour-of-csharp/tutorials/