Bir kafede garson çalışıyor. Müşteri garsona şunu söyler: "Sipariş al, servis yap, hesabı getir." Müşteri garsonun nasıl yapacağıyla ilgilenmez — sadece ne yapacağını bilir.
İşte interface tam olarak budur. Bir sınıfın ne yapacağını tanımlayan ama nasıl yapacağına karışmayan bir sözleşmedir.
Diyelim ki bir ödeme sistemi yazıyorsun. Kredi kartıyla da ödeme yapılabilir, havaleyle de. İkisi de farklı çalışır ama ikisi de ödeme yapar.
Interface sayesinde kodun geri kalanı nasıl ödeme yapıldığını bilmek zorunda kalmaz. Sadece IOdemeServisi'ni kullanır.
public interface IOdemeServisi
{
void OdemeYap(decimal tutar);
bool OdemeDogrula(string referansNo);
}
public class KrediKartiServisi : IOdemeServisi
{
public void OdemeYap(decimal tutar)
{
Console.WriteLine($"Kredi kartıyla {tutar} TL ödeme yapıldı.");
}
public bool OdemeDogrula(string referansNo)
{
// doğrulama mantığı...
return true;
}
}
Sınıf hem ne yapacağını hem nasıl yapacağını içerir. Interface yalnızca ne yapacağını tanımlar — içinde kod olmaz, sadece imza vardır.
Bir sınıf birden fazla interface'i uygulayabilir. Bu, C#'ta çoklu kalıtımın kapısıdır.