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