Arayüz (Interface)
Interface diğer sınıfları yönlendiren bir kalıptır diyebiliriz. İçerisinde sadece metod isimleri ve özellikler(property) vardır. Yani sadece member imzaları bulunur. Bu yapı genelde grup halinde yazılan projelerde kullanılır. Proje yöneticisi interface içerisinde kullanılacak metod ve özellik kalıplarını tanımlar. Geriye kalan classları oluşturup içine doldurmaktır.Arayüz Tanımlama
public interface Iisim şeklinde tanımlanır. Interface tanımlarken public erişim belirleyicisi kullanılır ve interface isimleri adlandılırken ismin başı I ile başlar bu zorunlu değildir ama gelenek gibi birşeydir.
C#:
public interface IOgrenci
{
double yas { get; set; }
string isim { get; set; }
string soyisim { get; set; }
int DersNotları(int matematik, int fizik, int kimya);
}
Alan(field) yerine özellik tanımlanır. Kurucu veya yıkıcı metod bulundurmaz. Arayüzler sadece arayüzlerden türetilir. Statik bir yapı bulunamaz.
Arayüzü tanımladıktan sonra herhangi bir class'a miras vererek kullanırız. Miras alınan class'ta interface'in memberları tanımlı olması zorunludur.
C#:
public interface IOgrenci
{
double yas { get; set; }
string isim { get; set; }
string soyisim { get; set; }
int DersNotları(int matematik, int fizik, int kimya);
}
public class A5 : IOgrenci
{
public double yas { get; set; }
public string isim { get; set; }
public string soyisim { get; set; }
public int DersNotları(int matematik, int fizik, int kimya)
{
Console.WriteLine("Hello");
return 0;
}
}
Bir class birden fazla classtan kalıtım alamaz amam birden falza Interface'den kalıtım alabilir.
Bir class iki farklı interface'den aynı imzaya sahip memberı kalıtım aldığında name hiding olayı gerçekleşir. Bu durumdan kurtulmak için aşağıdaki yöntemi kullanıp sınıf nesnesi ınterface ile referans etmeliyiz, aksi taktirde memberlara erişim sağlayamayız.
C#:
static void Main(string[] args)
{
IA a = new MyClass();
a.x();
}
}
interface IA
{
void x();
}
interface IB
{
void x();
}
class MyClass : IA, IB
{
void IA.x()
{
}
void IB.x()
{
}
}
Soyut sınıflar (Abstract Class)
Abstract sınıflar sınıf isminin başına abstract keywordü getirilerek tanımlanır.Örnek:
public abstract class TurAbstract metodlar tanımlandığı sınıfta sadece metod imzasını alır, yani metodun gövdesi bulunmaz ve herhangi bir işlem yapmaz. İşlemler miras alındığı class içerisinde uygulanır. Miras aldığı sınıfta ise metodun override ile tanımlanması gerekmektedir. Aynı durum propertyler için de geçerilidir.
Abstract metodlar ve propertyler virtual bir yapıya sahiptir. Abstract metodlar ve propertyler tanımlanması için sınıfında abstract olması gerekmektedir. Abstract sınıflarda abstract olmayan metod ve propertyler bulunabilir. Abstract sınıflardan nesne üretilemez. Statcic metodlar abstract olarka tanımlanamazlar.
Abstract classlar yapı olarak Interface'e benzemektedir. Tek farkı Interface'de tanımlanan bütün imzalar miras alındığı sınıfta tanımlanmak zorundayken, abstract'a abstract olarak tanımlanmayan metod ve özellikler miras alınırken kullanılmak zorunda değildir ama Abstract olarak tanımlanan metod ve propertyler mirass alındığı sınıfta kullanılmak zorundadır. Abstract olarak tanımlanan metod ve propertylerin içi boştur yani sadece imza tanımlanır. Abstract classlar static olarak tanımlanamazlar ve kendilerinden nesne üretilemez. Abstract metodlar public olarak tanımlanır.
C#:
class Program
{
static void Main(string[] args)
{
Telefon t = new Telefon();
t.BilgiVer();
}
}
public abstract class ElektronikEsya
{
public abstract int fiyat { get; set; }
public abstract string marka { get; set; }
public abstract string renk { get; set; }
public abstract void BilgiVer();
}
public class Telefon : ElektronikEsya
{
public override int fiyat { get; set; } = 100;
public override string marka { get; set; } = "samsung";
public override string renk { get; set; } = "siyah";
public override void BilgiVer()
{
Console.WriteLine($"fiyat: {fiyat}TL, marka: {marka}, renk: {renk}");
}
}
Kod:
fiyat: 100TL, marka: samsung, renk: siyah
Interface bütün memberlarını kullandırırken, Abstract sadece abstract olarak tanımlana memberların kullanımını zorunlu kılıyor.
Sealed Class (Mühürleme)
Kısaca bir classın başka classlarca miras alınmasını engellemek için kullanılır.public sealed class ClassAdı Şeklinde tanımlanır.

