NTP’de soyutlamanın bir başka yolu da arayüzler (interfaces) aracılığıyla mümkündür. Bir arayüz, tüm ögeleri soyut olan bir sınıfa benzetilebilir ancak burada arayüzlerin ve sınıfların farklı kavramlar olması önemli bir husustur.
Bir sınıf sadece bir sınıftan türetilebiliyorken birden fazla arayüzden türetilebilir.Arayüzün içinde tanımlanan metotların sadece imzaları bulunur, gövdeleri bulunmaz. Ayrıca arayüzde bulunan tüm metotlar varsayılan olarak soyuttur (abstract) ve genel (public) erişim belirleyicisine sahiptir.Arayüz bir sınıf türü olmadığından içinde kod bloku bulunamaz. Arayüzde tanımlanan ögeler, kendinden türetilen sınıfta mutlaka uygulanmak (implement) zorundadır.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespaceWindowsFormsApp5
{
publicpartialclassForm1 : Form
{
publicForm1()
{
InitializeComponent();
}
privatevoidForm1_Load(object sender, EventArgs e)
{
Kedi kedi = new Kedi();
kedi.SesCikar();
kedi.Beslen();
Kopek kopek = new Kopek();
kopek.SesCikar();
kopek.Beslen();
Console.WriteLine("==================");
IHayvan hayvan1 = kedi;
IHayvan hayvan2 = kopek;
hayvan1.SesCikar();
hayvan2.SesCikar();
Console.WriteLine("==================");
IBeslen beslen1 = kedi;
IBeslen beslen2 = kopek;
beslen1.Beslen();
beslen2.Beslen();
}
}
}
interfaceIHayvan
{
voidSesCikar();
}
interfaceIBeslen
{
voidBeslen();
}
publicclassKedi : IHayvan, IBeslen
{
publicvoidSesCikar()
{
Console.WriteLine("Kedi: miyav");
}
publicvoidBeslen()
{
Console.WriteLine("Kedi süt içti.");
}
}
publicclassKopek : IHayvan, IBeslen
{
publicvoidSesCikar()
{
Console.WriteLine("Köpek: hav hav");
}
publicvoidBeslen()
{
Console.WriteLine("Köpek et yedi.");
}
}