C# DERS 32: ABSTRACT CLASS

 class Program
    {
        static void Main(string[] args)
        {
            // Interface'ler ile virtual metotların birleştirilmiş hali gibi düşünebiliriz.

            Database database = new Oracle();
            database.Add();
            database.Delete();

            Database database2 = new SqlServer();
            database2.Add();
            database2.Delete();

            // Interfaceler ve abstract classlar new'lenemezler

            Console.ReadLine();
        }
    }

    abstract class Database  //  abstract classlar ile
    {
        public void Add()  // hem tamamlanmış metotlar
        {
            Console.WriteLine("Added by default");
        }
        
        public abstract void Delete(); // hem de tamamlanmamış metotlar yazılabilir.
    }

    class SqlServer : Database // implement ettiğimizde sadece Delete gelir. Add metotunu olduğu gibi alır zaten.
    {
        public override void Delete()
        {
            Console.WriteLine("Deleted by SQL");
        }
    }

    class Oracle : Database
    {
        public override void Delete()
        {
            Console.WriteLine("Deleted by Oracle");
        }
    }

Abstract classlar, ortak özellikli classlara Base(taban) class olma görevini

üstlenir diyebiliriz. Mesela projenizde birden fazla class oluşturup

kullanmak istiyorsunuz. Ve oluşturacağınız classlar pek çok yönden

ortak özellikleri içerisinde barındırıyor. İşte bu durumda abstract

kullanmanız kodunuzun daha sağlıklı olmasını sağlayacaktır.

Abstract metotlar ise  sadece abstract classların içerisinde tanımlanır

ve kullanılacağı sınıf tarafından override edilmek

zorundadır. Oluşturduğumuz abstract class içerisine, abstract metot

yazılırken gövdesi yazılmaz ve daha sonra abstract classımızı

kullanacağımız sınıfta abstract metodunu override ederek kullanırız.

using System;
abstract class Cevre //Abstract class oluşturma
{
abstract public void CevreHesapla();
//Abstract metotu burda yazdık istediğimiz classta
//aynı isimde override edip kullanabiliyoruz
}
class Dikdortgen : Cevre
{
private int en;
private int boy;
public int En
{
get { return en; }
//geti silersen okuyamaz yani ekrana falan yazamaz ama değer verir
set { en = value; }
//seti silersen değer veremezsin ama ekrana yazdırabilirsin

}
public int Boy
{
get { return boy; }
set { boy = value; }
}
public override void CevreHesapla()
{
Console.WriteLine((2*En)+(2*Boy));
}
}
class Ucgen : Cevre
{
public int A { get; set; }
//diğer classtaki field ve property tanımıyla aynı işlemdir
public int B { get; set; }
public int C { get; set; }
public override void CevreHesapla()
{
Console.WriteLine(A+B+C);
}
}
class Program
{
static void Main()
{
Ucgen u = new Ucgen();
u.A = 5;
u.B = 4;
u.C = 2;
u.CevreHesapla();
Dikdortgen d = new Dikdortgen();
d.En = 10;
d.Boy = 5;
d.CevreHesapla();

}
}