Polymorphism (Çok Biçimlilik), Nesne Yönelimli Programlama'nın (OOP) temel prensiplerinden biridir. Aynı metot adıyla farklı davranışlar sergileyen sınıflar oluşturmaya olanak tanır. Polimorfizm sayesinde, bir nesne farklı formlarda kullanılabilir ve kodun esnekliği artar.
Alt sınıflar, üst sınıftaki metotları ezerek kendi davranışlarını belirleyebilir.
using System; class Animal { public virtual void MakeSound() { Console.WriteLine("Hayvan bir ses çıkarıyor."); } } class Dog : Animal { public override void MakeSound() { Console.WriteLine("Köpek havlıyor: Hav hav!"); } } class Cat : Animal { public override void MakeSound() { Console.WriteLine("Kedi miyavlıyor: Miyav miyav!"); } } class Program { static void Main(string[] args) { Animal myAnimal1 = new Dog(); Animal myAnimal2 = new Cat(); myAnimal1.MakeSound(); // Köpek havlıyor: Hav hav! myAnimal2.MakeSound(); // Kedi miyavlıyor: Miyav miyav! } }
Köpek havlıyor: Hav hav! Kedi miyavlıyor: Miyav miyav!
Alt sınıfın üst sınıfın metodunu çalıştırmasını sağlamak için base
anahtar kelimesi kullanılabilir.
class Animal { public virtual void MakeSound() { Console.WriteLine("Hayvan bir ses çıkarıyor."); } } class Dog : Animal { public override void MakeSound() { base.MakeSound(); Console.WriteLine("Köpek ayrıca havlıyor: Hav hav!"); } } class Program { static void Main(string[] args) { Dog myDog = new Dog(); myDog.MakeSound(); } }
Hayvan bir ses çıkarıyor. Köpek ayrıca havlıyor: Hav hav!
Bir sınıf içinde aynı isimde ancak farklı parametreler alan metotlar tanımlanabilir. Buna method overloading denir ve derleme zamanında (compile-time) belirlenir.
class MathOperations { public int Add(int a, int b) { return a + b; } public double Add(double a, double b) { return a + b; } public int Add(int a, int b, int c) { return a + b + c; } } class Program { static void Main(string[] args) { MathOperations math = new MathOperations(); Console.WriteLine(math.Add(5, 10)); // 15 Console.WriteLine(math.Add(5.5, 2.2)); // 7.7 Console.WriteLine(math.Add(1, 2, 3)); // 6 } }
15 7.7 6
Abstract sınıflar, polimorfizmi zorunlu hale getirir. Alt sınıflar, üst sınıftaki metodu mutlaka geçersiz kılmalıdır.
abstract class Animal { public abstract void MakeSound(); // Abstract metot } class Dog : Animal { public override void MakeSound() { Console.WriteLine("Köpek havlıyor: Hav hav!"); } } class Program { static void Main(string[] args) { Animal myDog = new Dog(); myDog.MakeSound(); } }
Köpek havlıyor: Hav hav!
Interface kullanarak farklı sınıfların aynı metodu kendi ihtiyaçlarına göre uygulamasını sağlayabiliriz.
interface IShape { void Draw(); } class Circle : IShape { public void Draw() { Console.WriteLine("Daire çiziliyor."); } } class Square : IShape { public void Draw() { Console.WriteLine("Kare çiziliyor."); } } class Program { static void Main(string[] args) { IShape shape1 = new Circle(); IShape shape2 = new Square(); shape1.Draw(); // Daire çiziliyor. shape2.Draw(); // Kare çiziliyor. } }
Polymorphism (çok biçimlilik), OOP’nin temel prensiplerinden biridir. Method Overriding ve Method Overloading ile uygulanabilir. Polimorfizm sayesinde kod daha esnek, okunabilir ve genişletilebilir hale gelir. Farklı nesnelerin aynı metotları farklı şekillerde kullanabilmesi, yazılım geliştirme sürecinde büyük avantaj sağlar.