
C# - Polymorphism Nedir
Polymorphism kelime anlamı birçok farklı biçime sahip olmak demektir. Nesne yönelimli programlamada polymorphism genellikle "bir arayüz, çoklu fonksiyonlar" olarak gösterilir.
Temelde iki farklı yönü vardır.
- Çalışma zamanında, türetilmiş nesne örneğindeki method parametreleri, kolleksiyonlar veya diziler gibi öğeler temel sınıfın öğeleri olarak ele alınır. Böyle durumlarda nesne örnekleri çalışma zamanı türü ile aynı değildir.
- Temel sınıflar içinde virtual methodlar tanımlanabilir ve uygulanabilir. Temel sınıftan türeyen sınıflar bu methodları override edebilir.
Virtual methodlar ilişkili nesne gruplarıyla düzgün bir şekilde çalışmaya olanak sağlar. Örneğin çeşitli şekiller oluşturmamızı sağlayan bir çizim programımız olduğunu varsayalım. Derleme zamanında kullanıcının hangi şekilleri oluşturacağını bilmiyoruz. Ancak uygulama çeşitli şekil türlerine sahiptir ve kullanıcı istediği şekli seçebilir. Bunun için iki temel adım kullanabiliriz.
- Belirlenen şekil sınıfları temel bir sınıftan türetilerek bir sınıf hiyerarşisi oluşturulur.
- Türetilmiş bir sınıftaki uygun methodu çağırmak için temel sınıftaki virtual methodu kullanılır.
Öncelikle "Şekil" adında base bir sınıf oluşturalım. Bu base sınfımızdan türeyen "Dikdörtgen" ve "Üçgen" sınıflarımızı oluşturalım. Şekil sınıfına "Çiz" adında virtual bir method oluşturalım. Daha sonra her türetilmiş sınıf içerisinde bu virtual methodumuzu override edelim. Bir tane Şekil kolleksiyonu oluşturalım ve içine Üçgen ve Dikdörtgen sınıfılarımızın nesne örneklerini koyalım.
using System;
using System.Collections.Generic;
public class Sekil
{
public virtual void Ciz()
{
Console.WriteLine("Temel sınıf çiz çalıştı.");
}
}
public class Dikdortgen: Sekil
{
public override void Ciz()
{
Console.WriteLine("Dikdörtgen sınıf çiz çalıştı.");
}
}
public class Ucgen: Sekil
{
public override void Ciz()
{
Console.WriteLine("Üçgen sınıf çiz çalıştı.");
}
}
public class Program
{
static void Main(string[] args)
{
List<Sekil> sekiller = new List<Sekil>
{
new Dikdortgen(),
new Ucgen()
};
foreach (Sekil sekil in sekiller)
{
sekil.Ciz();
}
}
}
Program çıktısı;
> Dikdörtgen sınıf çiz çalıştı.
> Üçgen sınıf çiz çalıştı.
Aslında C# içindeki tüm tipler (kullanıcı tanımlı türler dahil) polymorphic'tir. Çünkü hepsi Object sınıfından türemiştir.