C# Dersleri 76  - Polymorphism (Çok Biçimlilik)

C# Dersleri 76 - Polymorphism (Çok Biçimlilik)


C# Polymorphism (Çok Biçimlilik)

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.

Polymorphism Nedir?

  • Üst sınıf referansı kullanılarak alt sınıf nesneleri yönetilebilir.
  • Alt sınıflar, üst sınıftaki metotları ezerek kendi davranışlarını tanımlayabilir.
  • Metotların aynı isimle ancak farklı işlevlerle çalışmasını sağlar.

Polymorphism Türleri

  1. Method Overriding (Metot Ezme) - Run-time Polymorphism
  2. Method Overloading (Metot Aşırı Yükleme) - Compile-time Polymorphism

1. Method Overriding ile Polymorphism

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!
    }
}

Programın Çıktısı

Köpek havlıyor: Hav hav!
Kedi miyavlıyor: Miyav miyav!

Base Anahtar Kelimesi ile Üst Sınıf Metodunu Çağırma

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();
    }
}

Programın Çıktısı

Hayvan bir ses çıkarıyor.
Köpek ayrıca havlıyor: Hav hav!

2. Method Overloading (Metot Aşırı Yükleme) ile Polymorphism

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
    }
}

Programın Çıktısı

15
7.7
6

Abstract Sınıflarla Polymorphism

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();
    }
}

Programın Çıktısı

Köpek havlıyor: Hav hav!

Interface ile Polymorphism

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.
    }
}

Sonuç

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.

Bu içeriği beğendiyseniz paylaşarak destek olabilirsiniz!


Eğitim İçeriği

Eğitim C# Dersleri
Kategori Programlama Dili
Ders Adeti 80 Ders
Dil Türkçe
Güncelleme 04/2024
  • HTML Dersleri

    HTML Dersleri Sıfırdan İleri Seviyeye

    Kategori Web Programlama
    Ders Süresi 19 Ders
    Dil Türkçe
    Güncelleme 12/2020
    Derse Başla
  • Java Dersleri

    Java Dersleri ve Nesne Yönelimli Programlama

    Kategori Programlama Dili
    Ders Süresi 125 Ders
    Dil Türkçe
    Güncelleme 09/2020
    Derse Başla
  • CSS Dersleri

    CSS Dersleri Başlangıçtan İleri Seviyeye

    Kategori Web Programlama
    Ders Süresi 49 Ders
    Dil Türkçe
    Güncelleme 10/2021
    Derse Başla
  • Java Örnek Projeler

    Java Örnek Projeler

    Kategori Programlama Dili
    Ders Süresi 20 Ders
    Dil Türkçe
    Güncelleme 10/2022
    Derse Başla
  • C# Dersleri

    C# Dersleri ve Nesne Yönelimli Programlama

    Kategori Programlama Dili
    Ders Süresi 100 Ders
    Dil Türkçe
    Güncelleme 04/2024
    Derse Başla