Menu
Coddy logo textTech

Temel Kalıtım (:) Sözdizimi

Coddy'nin C# Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası — ders 19 / 70.

Kalıtım, bir sınıfın başka bir sınıfın özelliklerini ve metotlarını edinmesini sağlar. Aynı kodu tekrar yazmak yerine, paylaşılan işlevselliğe sahip bir temel sınıf (ebeveyn) oluşturursunuz, ardından ondan miras alan türetilmiş sınıflar (çocuklar) oluşturursunuz.

C#'ta, kalıtımı belirtmek için iki nokta üst üste : sembolünü kullanırsınız:

public class Animal
{
    public string Name { get; set; }
    
    public void Eat()
    {
        Console.WriteLine($"{Name} is eating.");
    }
}

public class Dog : Animal
{
    public void Bark()
    {
        Console.WriteLine($"{Name} says Woof!");
    }
}

Dog sınıfı her şeyi Animal sınıfından miras alır. Bunları tekrar bildirmeden Name özelliğine ve Eat() metoduna erişebilir, ayrıca kendi Bark() metodunu ekler:

Dog myDog = new Dog();
myDog.Name = "Buddy";
myDog.Eat();   // Çıktı: Buddy yemek yiyor.
myDog.Bark();  // Çıktı: Buddy Hav diyor!

C# yalnızca tekli kalıtımı destekler; bu, bir sınıfın yalnızca bir temel sınıftan miras alabileceği anlamına gelir. Ancak, türetilmiş bir sınıfın başka bir sınıf için temel sınıf haline geldiği kalıtım zincirleri oluşturabilirsiniz. Bu, kodunuzu düzenli ve yeniden kullanılabilir tutarken gerçek dünya ilişkilerini modelleyen bir hiyerarşi oluşturur.

challenge icon

Görev

Kolay

Türetilmiş sınıfların temel bir sınıftan işlevselliği paylaşırken kendi benzersiz davranışlarını nasıl eklediğini gösteren bir araç hiyerarşisi oluşturalım.

Kodunuzu düzenlemek için üç dosya oluşturacaksınız:

  • Vehicle.cs: Transport ad alanı (namespace) içinde bir Vehicle sınıfı tanımlayın. Bu, tüm araçların paylaştığı temel sınıfınız olacaktır. Bir Brand özelliğine (string) ve bir Year özelliğine (int) sahip olmalı, ayrıca "{Brand} engine started." yazdıran bir StartEngine() metoduna sahip olmalıdır.
  • Car.cs: Transport ad alanı içinde Vehicle sınıfından miras alan bir Car sınıfı tanımlayın. Araba, kendi NumberOfDoors (int) özelliğini ve "{Brand} goes Beep Beep!" yazdıran bir Honk() metodunu ekler.
  • Program.cs: Ana dosyanızda, giriş değerlerini kullanarak bir Car örneği oluşturun. Özelliklerini (miras alınanlar dahil) ayarlayın, ardından arabanın hem kendi metodlarını hem de Vehicle sınıfından miras aldığı metodları kullanabildiğini gösterin.

Üç giriş alacaksınız:

  • Marka adı (Brand name)
  • Yıl (Year)
  • Kapı sayısı (Number of doors)

Arabanın bilgilerini yazdırın ve yeteneklerini şu formatta gösterin:

Car: {Brand} ({Year})
Doors: {NumberOfDoors}
{StartEngine output}
{Honk output}

Örneğin, girişler Toyota, 2022 ve 4 ise, çıktı şöyle olmalıdır:

Car: Toyota (2022)
Doors: 4
Toyota engine started.
Toyota goes Beep Beep!

Car sınıfınızın, Vehicle içinde tanımlanmış olmalarına rağmen Brand özelliğine ve StartEngine() metoduna nasıl erişebildiğine dikkat edin. İşte kalıtımın (inheritance) gücü budur - türetilmiş sınıf, temel sınıfındaki her şeyi otomatik olarak alır!

Kopya kağıdı

Kalıtım, bir sınıfın iki nokta üst üste : sembolünü kullanarak başka bir sınıftan özellikler ve metotlar edinmesini sağlar:

public class Animal
{
    public string Name { get; set; }
    
    public void Eat()
    {
        Console.WriteLine($"{Name} is eating.");
    }
}

public class Dog : Animal
{
    public void Bark()
    {
        Console.WriteLine($"{Name} says Woof!");
    }
}

Türetilmiş sınıf (Dog), temel sınıftan (Animal) tüm özellikleri ve metotları miras alır ve kendi özelliklerini ekleyebilir:

Dog myDog = new Dog();
myDog.Name = "Buddy";
myDog.Eat();   // Miras alınan metot
myDog.Bark();  // Kendi metodu

C# yalnızca tekli kalıtımı destekler - bir sınıf sadece bir temel sınıftan miras alabilir. Ancak, hiyerarşiler oluşturmak için kalıtım zincirleri oluşturabilirsiniz.

Kendin dene

using System;
using Transport;

class Program
{
    public static void Main(string[] args)
    {
        // Girişi oku
        string brand = Console.ReadLine();
        int year = Convert.ToInt32(Console.ReadLine());
        int doors = Convert.ToInt32(Console.ReadLine());
        
        // TODO: Bir Car örneği oluşturun
        
        // TODO: Arabanın özelliklerini ayarlayın (Brand, Year, NumberOfDoors)
        
        // TODO: Arabanın bilgilerini istenen formatta yazdırın:
        // Car: {Brand} ({Year})
        // Doors: {NumberOfDoors}
        // Ardından StartEngine() ve Honk() metotlarını çağırın
    }
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Nesne Yönelimli Programlama bölümündeki tüm dersler