Menu
Coddy logo textTech

ToString() Geçersiz Kılma

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

C#'taki her sınıf, bir ToString() metodu sağlayan object sınıfından miras alır. Varsayılan olarak, tam nitelikli tür adını döndürür; bu, bir nesnenin gerçek verilerini görmek istediğinizde pek kullanışlı değildir.

Nesnenizin anlamlı bir dize temsilini döndürmek için ToString() metodunu geçersiz kılabilirsiniz:

public class Person
{
    public string Name { get; }
    public int Age { get; }
    
    public Person(string name, int age)
    {
        Name = name;
        Age = age;
    }
    
    public override string ToString()
    {
        return $"{Name} ({Age} years old)";
    }
}

Artık bir Person nesnesini yazdırdığınızda veya birleştirdiğinizde, okunabilir bir çıktı alırsınız:

Person p = new Person("Alice", 30);
Console.WriteLine(p);  // Alice (30 yaşında)

Geçersiz kılma (override) işlemi olmadan, bu MyNamespace.Person gibi bir çıktı verirdi. override anahtar kelimesi gereklidir çünkü object üzerinden devralınan metodu değiştiriyorsunuz. Bu, bir nesnenin durumuna dair hızlı bir içgörüye ihtiyaç duyduğunuz hata ayıklama ve günlükleme işlemleri için özellikle değerlidir.

challenge icon

Görev

Kolay

Yazdırıldığında anlamlı dize temsilleri sağlayan, hata ayıklamayı ve kitap bilgilerini görüntülemeyi çok daha sezgisel hale getiren bir Book sınıfı oluşturalım.

Kodunuzu iki dosya halinde düzenleyeceksiniz:

  • Book.cs: Library ad alanında (namespace), bir kitabı temel ayrıntılarıyla temsil eden bir Book sınıfı oluşturun. Kitabınız şunlara sahip olmalıdır:
    • Üç adet salt okunur (read-only) özellik: Title (string), Author (string) ve Year (int)
    • Bu sırayla başlık (title), yazar (author) ve yılı (year) kabul eden bir yapıcı metot (constructor)
    • Şu biçimlendirilmiş dizeyi döndüren geçersiz kılınmış (overridden) bir ToString() metodu: "{Title}" by {Author} ({Year})
    Çıktıda başlığın çift tırnak içine alınması gerektiğine dikkat edin!
  • Program.cs: Ana dosyanızda, girdi değerlerini kullanarak bir Book nesnesi oluşturun ve bunu doğrudan yazdırın. ToString() geçersiz kılmanız sayesinde, kitap nesnesini Console.WriteLine() metoduna iletmek, tür adı yerine biçimlendirilmiş bilgileri otomatik olarak görüntüleyecektir.

Üç girdi alacaksınız:

  • Kitap başlığı (string)
  • Yazar adı (string)
  • Yayın yılı (integer)

Kitap nesnesini doğrudan Console.WriteLine() kullanarak yazdırın.

Örneğin, girdiler The Great Gatsby, F. Scott Fitzgerald ve 1925 ise çıktı şu şekilde olmalıdır:

"The Great Gatsby" by F. Scott Fitzgerald (1925)

Buradaki sihir, ToString() metodunu açıkça çağırmıyor olmanızdır - bir nesneyi Console.WriteLine() metoduna ilettiğinizde, nesnenin ToString() metodunu otomatik olarak çağırır. Sizin geçersiz kılma işleminiz, sadece Library.Book göstermek yerine bu çıktıyı kullanışlı hale getirir!

Kopya kağıdı

C#'taki her sınıf, bir ToString() metodu sağlayan object sınıfından miras alır. Varsayılan olarak, tam nitelikli tür adını döndürür.

Anlamlı bir dize temsili döndürmek için ToString() metodunu geçersiz kılın (override):

public class Person
{
    public string Name { get; }
    public int Age { get; }
    
    public Person(string name, int age)
    {
        Name = name;
        Age = age;
    }
    
    public override string ToString()
    {
        return $"{Name} ({Age} years old)";
    }
}

Bir nesneyi yazdırdığınızda, ToString() otomatik olarak çağrılır:

Person p = new Person("Alice", 30);
Console.WriteLine(p);  // Alice (30 years old)

object sınıfından miras alınan bir metodu değiştirirken override anahtar kelimesi gereklidir.

Kendin dene

using System;
using Library;

class Program
{
    public static void Main(string[] args)
    {
        // Girdiyi oku
        string title = Console.ReadLine();
        string author = Console.ReadLine();
        int year = Convert.ToInt32(Console.ReadLine());

        // TODO: Giriş değerlerini kullanarak bir Book nesnesi oluşturun

        // TODO: Console.WriteLine() kullanarak kitap nesnesini doğrudan yazdı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