C# Dersleri 78 - Interface

C# Dersleri 78 - Interface


C# Interface (Arayüz) Nedir?

Interface (Arayüz), C# dilinde bir sınıfın uygulaması gereken metotları tanımlayan bir yapıdır. Interface'ler yalnızca metot imzalarını içerir, herhangi bir uygulama (gövde) içermezler. Bu sayede, bir sınıfa belirli bir davranış kazandırılmasını sağlarlar.

Interface’in Temel Özellikleri

  • Metotların sadece imzası bulunur, metotların içeriği interface içinde yazılmaz.
  • Bir sınıf, birden fazla interface’i uygulayabilir (Çoklu kalıtımı destekler).
  • Interface üyeleri varsayılan olarak public erişim belirleyicisine sahiptir.
  • Interface içinde sadece metot, property ve event tanımlanabilir.

Interface Tanımlama

Interface tanımlamak için interface anahtar kelimesi kullanılır.

interface IAnimal
{
    void MakeSound(); // Metot imzası
}

Interface Kullanımı

Bir sınıf, bir interface’i uygularken, o interface içinde tanımlı tüm metotları ezmek (override etmek) zorundadır.

using System;

interface IAnimal
{
    void MakeSound(); // Interface metodu (gövdesiz)
}

class Dog : IAnimal
{
    public void MakeSound()
    {
        Console.WriteLine("Köpek havlıyor: Hav hav!");
    }
}

class Cat : IAnimal
{
    public void MakeSound()
    {
        Console.WriteLine("Kedi miyavlıyor: Miyav miyav!");
    }
}

class Program
{
    static void Main(string[] args)
    {
        IAnimal myDog = new Dog();
        IAnimal myCat = new Cat();

        myDog.MakeSound(); // Köpek havlıyor: Hav hav!
        myCat.MakeSound(); // Kedi miyavlıyor: Miyav miyav!
    }
}

Programın Çıktısı

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

Interface İçinde Property Tanımlama

Interface içinde özellikler (property) de tanımlanabilir:

interface IVehicle
{
    string Brand { get; set; }
    void Drive();
}

class Car : IVehicle
{
    public string Brand { get; set; }

    public void Drive()
    {
        Console.WriteLine($"{Brand} arabası yolda.");
    }
}

class Program
{
    static void Main(string[] args)
    {
        Car myCar = new Car { Brand = "Toyota" };
        myCar.Drive();
    }
}

Programın Çıktısı

Toyota arabası yolda.

Birden Fazla Interface Kullanımı

Bir sınıf, birden fazla interface'i uygulayabilir:

interface IWorkable
{
    void Work();
}

interface IEatable
{
    void Eat();
}

class Robot : IWorkable
{
    public void Work()
    {
        Console.WriteLine("Robot çalışıyor.");
    }
}

class Human : IWorkable, IEatable
{
    public void Work()
    {
        Console.WriteLine("İnsan çalışıyor.");
    }

    public void Eat()
    {
        Console.WriteLine("İnsan yemek yiyor.");
    }
}

class Program
{
    static void Main(string[] args)
    {
        Robot myRobot = new Robot();
        myRobot.Work();

        Human myHuman = new Human();
        myHuman.Work();
        myHuman.Eat();
    }
}

Programın Çıktısı

Robot çalışıyor.
İnsan çalışıyor.
İnsan yemek yiyor.

Interface ile Polymorphism

Interface’ler, polimorfizm sağlamak için güçlü bir araçtır. Interface referansları kullanılarak farklı sınıfların aynı metotları farklı şekillerde uygulaması sağlanabilir.

interface IShape
{
    double GetArea();
}

class Circle : IShape
{
    public double Radius;

    public Circle(double radius)
    {
        Radius = radius;
    }

    public double GetArea()
    {
        return Math.PI * Radius * Radius;
    }
}

class Rectangle : IShape
{
    public double Width, Height;

    public Rectangle(double width, double height)
    {
        Width = width;
        Height = height;
    }

    public double GetArea()
    {
        return Width * Height;
    }
}

class Program
{
    static void Main(string[] args)
    {
        IShape shape1 = new Circle(5);
        IShape shape2 = new Rectangle(4, 6);

        Console.WriteLine($"Dairenin Alanı: {shape1.GetArea():F2}");
        Console.WriteLine($"Dikdörtgenin Alanı: {shape2.GetArea():F2}");
    }
}

Programın Çıktısı

Dairenin Alanı: 78.54
Dikdörtgenin Alanı: 24.00

Abstract Class ve Interface Arasındaki Farklar

Özellik Abstract Class Interface
İçerik Hem gövdeli hem de gövdesiz metotlar içerebilir. Sadece metot imzaları içerir (C# 8.0 sonrası varsayılan metotlar eklenebilir).
Erişim Belirleyiciler Public, private, protected gibi erişim belirleyicileri içerebilir. Tüm üyeler varsayılan olarak public'tir.
Çoklu Kalıtım Tek bir abstract class miras alınabilir. Bir sınıf birden fazla interface’i uygulayabilir.
Kullanım Amacı Ortak özellikler ve metotları tanımlamak. Sınıfların uygulaması gereken davranışları belirlemek.

Ne Zaman Interface Kullanmalıyım?

  • Eğer bir sınıfa belirli bir davranışı zorunlu kılmak istiyorsanız, interface kullanın.
  • Eğer sınıf içinde bazı metotları tanımlamak ve bazılarını zorunlu kılmak istiyorsanız, abstract class kullanın.
  • Bir sınıfın birden fazla türde davranış kazanmasını istiyorsanız, interface kullanabilirsiniz.

Sonuç

Interface'ler, C#’ta çoklu kalıtımı destekleyen ve farklı sınıflara ortak davranışlar kazandıran önemli bir yapıdır. Abstract class’lardan farklı olarak sadece metot imzalarını içerirler ve metotları implement etmek zorunludur. Interface’ler sayesinde, yazılım daha esnek ve genişletilebilir hale gelir.

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