C# Da İnterface Konusunda Aklıma Takılan Sorulaar?
-
C# da interface konusunu çalışıyordum.(Konuyu yeni öğrendiğim için aklıma bazı sorular takılıyor.Konunun mantığını tam olarak anlamak istiyorum kodları ezberlemek değil.) İnterface konusunda aşağıdaki gibi bir örnek vermiş kitap.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication1
{
class Program
{
class Daire : IComparable
{
int yaricap; //Sınıfımıza ait field(alan)
public Daire(int yaricap)//Sınıfın kurucu metodu
{
this.yaricap = yaricap;
}
public int CompareTo(object daire1) //Arayüzden gelen metodumuz.
{
//metoda gelen daire1 değişkeni object olduğu için öncelikle kendi türüne dönüştürüyoruz.
Daire karsilastirilacak_daire = daire1 as Daire;
//yarıçapı bu dairenin yarıçapı ile aynı ise 0, farklı ise -1 gönderiyoruz.
return (yaricap == karsilastirilacak_daire.yaricap) ? 0 : -1;
}
}
static void Main(string[] args)
{
Daire daire_1 = new Daire(3);//Birinci daire nesnemiz
Daire daire_2 = new Daire(2);//İkinci daire nesnenimiz
//Karşılaştırılan her iki daire nesnemizinde yarıçapı faklı olduğu için ekrana -1 yazacaktır.
Console.WriteLine(daire_1.CompareTo(daire_2));
Console.Read();
}
}
}
Aklıma takılan soru şu yukarıda IComparable interfaceden ben niye kalıtımla CompareTo metodunu alıyorum. Ben yukarıdaki
": IComparable" ifadesini yazmasam,CompareTo metodunu kaltımla almasam zaten bu metodu döndüreceği kodları zaten yazıyorum.Yani ": IComparable" silsem programı yeniden çalıştırsam ayni çıktıyılacağım.
Aklıma takılan asıl soru şu:
İnterface niçin gerekli ?
Niçin interfacele bir sınıfa kalıtım yapayım? -
hocam interface ve abstract kavramları oop nin temellerini oluşturur. Yazılım tasarım ve mimarisi konusunda bilgilerin genişledikçe neden gerek olduğunu daha iyi anlayacaksındır.
-
Şöyle olacak,
IComparable bekleyen bir metoda senin Daire sınıfından oluşturduğun nesneyi gönderdiğinde çalışacak. Kısaca senin sınıftan türetilen nesneler sorunsuzca IComparable olacak yeri gelince. Bu şekilde bir arayüzü kendi sınıfına uyarlamış olacaksın.
Soyut örnekler yerine bir somut örnek üzerinden gitmeniz daha kolay olur. Örneğin bir otomobil ve daha geniş bir kavram olan kara taşıtını düşünün. Kara taşıtının tüm özellikleri otomobilde mevcut (tekerlekleri var, freni var vs). Yani kara taşıtı istediğimiz yerde önümüze otomobil getirseler gıkımız çıkmaz. Fakat kara taşıtı sadece otomobil değil, motosiklet de olabilir (bunun da tekerlekleri, freni var vs.). Fakat otomobil ile motosiklet çok farklı denebilir (ortak özelliklerinin yanında birinin iki diğerinin dört tekeri var, birisi ağır diğeri hafif gibi).
Şimdi Boğaz Köprüsündeki gişeleri düşünelim. Gişeden geçen taşıtlardan istediğimiz şey fren yapmaları. Biz tüm kara taşıtlarının fren yaptığını biliyoruz ve gişeden geçmekte olan tüm taşıtlara fren yaptırıyoruz. Bu durumda sadece kara taşıtı'na fren yap desek, otomobil de motosiklet de bizi kırmayacak. Kilit nokta ise ikisi de fren yapmasına rağmen birisinin pedala basması diğerinin gidonu sıkması gerekecek (uyarlama farkı). Sonuç olarak bizim için gişeden geçmek üzere olan şey önemli değil. Biz fren yap emrini verdikten sonra kendi istedikleri gibi fren yapabilirler:)
