> For the complete documentation index, see [llms.txt](https://cnahmet.gitbook.io/asp-net-notlarim/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://cnahmet.gitbook.io/asp-net-notlarim/nesne-tabanli-programlama/inheritance.md).

# Inheritance

Bir object in özelliklerinin farklı object ler tarafından da kullanılabilmesine olanak sağlayan bir özelliktir.

```aspnet
class Person {
        public string Name { get; set; }
        public string Surname { get; set; }
        public Person(string name, string surname)
        {
            this.Name = name;
            this.Surname = surname;
            Console.WriteLine("Person oluşturuldu");
        }

        public virtual void Intro(){
            Console.WriteLine(this.Name + " " + this.Surname);
        }

    }

    class Student:Person{
        public int StudentNumber { get; set; }
        public Student(string name, string surname, int studentNumber):base(name,surname)
        {
            this.StudentNumber = studentNumber;
            Console.WriteLine("Student oluşturuldu");
        }

        public override void Intro(){
            Console.WriteLine(this.Name + " " + this.Surname + " " + this.StudentNumber);
        }
    }

    class Teacher:Person {
        public string Branch { get; set; }
        public Teacher(string name, string surname, string branch):base(name,surname)
        {
            this.Branch = branch;
        }
        public void Teach(){
            Console.WriteLine("Hoca camide");
        }

        public override void Intro(){
            Console.WriteLine(this.Name + " " + this.Surname + " " + this.Branch);
        }
    }

    class Program
    {

        static void Main(string[] args)
        {
            var p = new Person("Ahmet", "Can");
            var s = new Student("Kübra", "Şimşek",135);
            var t = new Teacher("Adem","Can","Bilişim");

            p.Intro();
            s.Intro();
            t.Teach();
            t.Intro();

}

/*
Çıktısı

Person oluşturuldu
Student oluşturuldu
Person oluşturuldu
Ahmet Can
Kübra Şimşek 135
Hoca camide
Adem Can Bilişim
*/
```

{% hint style="info" %}
**base**: Miras aldığımız sınıftan kullanacağımız propertyleri belirtmek için kullanılır. Yukarıdaki kod bloğunda **name** ve **surname** alanları **Person** class ından gelmiştir.
{% endhint %}

{% hint style="info" %}
**virtual & override**: Miras alınan ve miras alan class ta aynı isimde bir method varsa bu methodlar kullanılır. Miras alınan class a **virtual** yazarak, miras alan class ın bu methodu **override** ile ezebilmesini yani değiştirebilmesini sağlarız. Eğer **override** yaptığımız methodda temel methodu kullanmak istersek **base** methodunu kullanabiliriz. **base** bize önce miras alınan yerdeki methodu çalıştırırken ardından **override** edilmiş methodu çalıştırır.
{% endhint %}
