Inheritance (Kalıtım) Nedir?

Inheritance (kalıtım), nesne yönelimli programlamanın üç temel unsurundan biridir. Kalıtım hiyerarşik sınıflandırma olanağı sağlar. Kalıtım kullanarak birbiri ile ilişkili bir grup nesnenin ortak özelliklerini tanımlayan temel bir sınıf oluşturabilriz. Bu temel sınıf daha sonra belirli sınıflara kalıtım yoluyla aktarılır. C# dilinde kalıtım yoluyla aktarılan sınıfa temel sınıf adı verilir. Kalıtım işlemi gerçekleştirilen sınıf türetilmiş sınıf olarak adlandırılır. Bu sebeple türetilmiş sınıfa temel sınıfın özelleştirilmiş hali diyebiliriz. Türetilmiş sınıf temel sınıfta tanımlanmış tüm değişken, method, özellik gibi öğeleri kalıtım yoluyla elde eder. Kendine özgü öğeleri ayrıca kendine ekleyebilir.

Yazılımda BaseClass mantığı kalıtım vermektir.Base sınıfların kesinlikle örneklemi (interitance) çıkarılmaz.bu bir hataya yol açmaz ama bu bir prensiptir.Base sınıfların amacı örneklem alınması değil kalıtım vermesidir.

public string username --> username gibi bir özelliği biz base sınıfa yazamayız. bunun nedeni ata sınıfların diğer sınıflarda barındıracak olan özellikleri içerisinde tutma prensibidir username gibi bir özellik sadece"user.cs" class ı ilgilendirir.Product.cs yada category.cs gibi sınıflarda bu özelliğe ihtiyacım olmadığından dolayı username özelliğinin yeri baseclass olmamalıdır.

Proje büyüdükçe birkaç tane ata sınıfı (class) kullanalılabilir.mimarinmizde buna göre hareket etmemiz ve özellikleri ona göre yerleşmemiz gerekir.

Türetilmiş sınıflar sadece bir adet temel sınıftan kalıtım alabilir. C# türetilmiş sınıf içine birden fazla temel sınıfı kalıtım yoluyla aktarmayı desteklemez. Ancak bir türetilmiş sınıfı başka bir türetilmiş sınıfın temel sınıfı olmasını sağlayan kalıtım hiyararşisini destekler. Ayrıca hiçbir sınıf dolaylı yada dolaysız olarak kendi kendisinin temel sınıfı olamaz.

Kalıtımın başlıca avantajı, bir grup nesnenin ortak özelliklerini tanımlayan temel sınıf oluşturduktan sonra bu sınıf, özelleştirilmiş türetilmiş sınıfılardan istenilen sayıda oluşturmak için kullanılabilir. Örneğin Sekil sınıfımızdan türeyen Dikdortgen sınıfı gibi bir çok alt sınıflar oluşturabiliz.

Temel ve türetilmiş sınıflara referansta bulunurken bazen üst sınıf ve alt sınıf terimleri kullanılır. Bu terimler Java dilinden gelmektedir. Java'da üst sınıf terimi C# dilinde temel sınıf, alt sınıf ise türetilmiş sınıf olarak kullanılır. C++'da temel sınıfı/türetilmiş sınıf kelimelerini kullanır.

 public class Category: BaseClass //Artık category.cs sınıfım baseclass.cs sınıfımda barındırdığım bütün özelliklere sahiptir.
 {
 }

-----------------------------------------------------ÖRNEK---------------------------------------------------------

using System;
using System.Collections.Generic;

public class Sekil//BASE ATA SINIF
{
    public double genislik;
    public double yukseklik;
    public void Goster()
    {
        Console.WriteLine("Genişlik: " + genislik + ", Yükseklik: " + yukseklik);
    }
}

public class Ucgen: Sekil
{
    public string adi;

    public double Alan()
    {
        return genislik * yukseklik / 2;
    }
}

public class Program
{
    static void Main(string[] args)
    {
        Ucgen ucgen = new Ucgen();
        ucgen.genislik = 10;
        ucgen.yukseklik = 2;

        ucgen.Goster();
        Console.WriteLine("Üçgenin alanı: " + ucgen.Alan());
    }
}                        
                        //Program çıktısı;

               // Genişlik: 10, Yükseklik: 2
               // Üçgenin alanı: 10

-----------------------------------------------------ÖRNEK---------------------------------------------------------

class A
{
    public int degisken_1;
    public void Metot_1()
    {
        Console.WriteLine("A Sınıfının Metodu");
    }
}
class B : A
{
    public int degisken_2;
    public void Metot_2()
    {
        Console.WriteLine("B Sınıfının Metodu");
    }
}

Yukarıdaki örnekte; A temel sınıf, B ise türetilmiş sınıftır. Türetme işlemi “class B : A” kodu ile 11. satırda yapılmıştır. B sınıfı A sınıfından türetildiği için A sınıfı içerisindeki değişken ve metodu kalıtım yolu ile almaktadır.

class Program
{
    static void Main(string[] args)
    {
        B b = new B();
        b.degisken_1 = 10;
        b.Metot_1();
        b.degisken_2 = 15;
        b.Metot_2();
    }
}

Türetme işleminden dolayı B sınıfı, A sınıfı içerisindeki “degisken_1” ve “Metot_1()” elemanlarını kendi içerisinde tanımlanmış gibi kullanabilmektedir.

NOT:Türetilmiş sınıf, temel sınıf içerisindeki değişkenleri ve metotları kendi içerisinde tanımlanmış gibi kullanabilir. Ancak temel sınıf, türetilmiş sınıftaki değişkenleri ve metotları kullanamaz.

-----------------------------------------------------ÖRNEK---------------------------------------------------------

BaseCar(Ata Sınıf kalıtım alınıp yeteneklerini göndereceği sınıf);

public class BaseCar
    {
        public int Id { get; set; }
        private DateTime _createdate = DateTime.Now;
        public DateTime CreateDate 
        {
            get { return _createdate; }
          
        }
        public Status Status { get; set; }//bu bir tanımlamasıdır enum farklı bir class içerisinde tanımlanmıs şekildedir fakat bu örnekte bundan bahsetmiycez sadece tanımlanması kalsın
        public double Torgue { get; set; }
        public double RPM;
        public string Brand;
        public double Engine { get; set; }
        public string Model { get; set; }

//yazılımda yetenek dediğimizde bunun bir metod oldugunu anlamalıyız.
//Aşağıda basephone.cs ata sınıfına bir değer kazandıracağız.Ayrıca bu yetenek diğer sınıflarada kalıtım yoluyla aktarılacak
        
        public virtual double CalculatehorsePower()
        {

//c# da bir methodun alt sınıflarda ezilip,farklı bir yetenek kazandırılması işlemine override diyoruz.
//yani örneğimizde "Cal()" methodu her bir alt sınıfta
//farklı bir yeteneğe sahip olmasını temin ediyoruz.
//C# da bir methodu alt sınıflarda ezilebilir bir hale getirmek icin ilgili methodu "virtual" olarak işaretlememiz gerekmektedir
            
            return Torgue*RPM;
        }
    }

Türetilmiş Sınıf1 BaseCar dan yetenek alan;

public class Audi:BaseCar
    {
        public double Enginecapacity { get; set; } //türetilmiş sınıfların kendi property si olabilir

 //aşağıda ata sınıfımızdan gelen CalculatehorsePower() metodunu ezdik 
 //ve farklı bir yetenek kazandırdık yazılımda bu isleme override nedir türk yazılımcılar
 //metodu ezmek yada farklı sekıllerde imzalamak olarakda olarak bu işlemi adlandır

        public override double CalculatehorsePower()
        {
            return Enginecapacity*Torgue * RPM; //BaseCar dan gelen Torgue ve RPM fieldlarını kendi içinde oluşturdugu Enginecapacity field ı ile işlem yaptı
        }
    }

Türetilmiş Sınıf2 BaseCar dan yetenek alan;

public class Wolswagen:BaseCar
    {
        public double exhaustSystem;
        public override double CalculatehorsePower()
        {
            return RPM*Torgue*exhaustSystem;
        }

Last updated