C# Dersleri 26 - Interface Kullanımı

     C# dilinde Interface, classlara hangi methodları ve hangi propertyleri kullanmak zorunda olduklarını söylemenizi sağlayan yapılardır. Interface içinde sadece tanımlama yapılır, kod blokları olmaz. Bir nevi classlar için bir şablon oluşturmuş olursunuz Interface'ler sayesinde.

     Özetlemek gerekirse; Interface, classta neler olması gerektiğini bildirir.     

interface ICar
{
    int CarId { get; set; }
    string Model { get; set; }
    int ProductionYear { get; set; }
    int GetMaxSpeed(int carId);
    string GetModelName();
}

     Interface tanımlaması yaparken(ne hikmetse) "interface" keywordunu kullanırız. Bir zorunluluk değildir tabi ki ama, gelenek gibi düşünün, Interface isimleri "I" ile başlar. Hem classın hem interfacelerin uzantısı .cs olduğundan karıştırmamızı engeller Interface isimlerini I ile başlatmak. Benim örneğimde Interface adı ICar. Burada daha sonra (belki aynı projede çalışan başka yazılımcılar tarafından) oluşturulacak ve bu Interfaceyi inherit edecek classlarda bulunması gereken property ve methodları belirtiyoruz. Ancak tanımlamalarını yapmıyoruz. Yani hangi property ve methodların olması gerektiğini belirleyen Interface, o method ve propertylerin nasıl çalıştığını belirleyen de classlar.

     C# dilinde Interfacelerdeki property ve method tanımlamalarında Access modifier(public,privite..vs) kullanmıyoruz. Şimdi gelelim bu Interfaceyi inherit eden class tanımlamasına :      

class Car : ICar
{
    public int CarId { get; set; }
    public string Model { get; set; }
    public int ProductionYear { get; set; }

    public int GetMaxSpeed(int carId)
    {
        int maxSpeed = 0;

        if (carId == 1)
        {
            maxSpeed = 220;
        }
        else if (carId == 2)
        {
            maxSpeed = 240;
        }
        else
        {
            maxSpeed = 200;
        }

        return maxSpeed;
    }

    public string GetModelName()
    {
        return Model;
    }
}

     Interfaceten miras alma olayının, classtan miras almaktan farkı yok. Tanımladığınız class isminin sonuna ":" ile miras almak istediğiniz Interface adını belirtiyorsunuz. Daha sonra Interface'te belirtilen property ve methodlar için, tipleri, parametreleri ve isimleri aynı olacak şekilde, tanımlama yapmanız gerekiyor.  Eğer bunlardan bir tanesini unutursanız, compiler hata veriyor ve devam etmenizi engelliyor.

C# Interface Hatası 

     C# çoklu Interface mirasına izin veriyor. Interfaceler arasına virgül koyarak bir classın istediğiniz kadar Interfaceten inherit edilmesini sağlayabilirsiniz.

     Neden Interface Kullanırız

     "Madem tanımlamasını class içinde yapacağım o zaman neden Interface var?" diye sormuşsunuzdur muhtemelen. Nerede işinize yarayabileceğini bir örnek ile açıklayayım. Büyük bir ekip tarafından hazırlanan büyük bir yazılım düşünün. Bu yazılım farklı dosya formatları ile ilgili işlemler yapacak. İşlem yapılacak her bir dosya formatı için farklı classlar olacak projede ve her bir farklı classın geliştirilmesinden farklı bir yazılımcı sorumlu olacak. Hem de her classta olması istenen ortak işlemler var. Örneğin dosya formatı ne olursa olsun "Read" ve "Create" işlemleri yapan methodlar bulunmalı geliştirilen classlarda. Bu durumda bu classların miras alacağı bir Interface oluşturup bu Interfaceler sayesinde Read ve Create methodlarını zorunlu tutabilirsiniz. Bu da tüm yazılımcıların istenen ortak işlemleri kodladığını garantiye almak anlamına geliyor.

YORUMLAR
Email Adresi *
Görüntülenecek İsim *
Yorum *
Paylaş
  • f