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.
Görev
KolayYazdı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:Libraryad alanında (namespace), bir kitabı temel ayrıntılarıyla temsil eden birBooksınıfı oluşturun. Kitabınız şunlara sahip olmalıdır:- Üç adet salt okunur (read-only) özellik:
Title(string),Author(string) veYear(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})
- Üç adet salt okunur (read-only) özellik:
Program.cs: Ana dosyanızda, girdi değerlerini kullanarak birBooknesnesi oluşturun ve bunu doğrudan yazdırın.ToString()geçersiz kılmanız sayesinde, kitap nesnesiniConsole.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
}
}
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
1OOP Temelleri
Harici Dosyalarİsim Alanları ve YönergelerSınıf ve Nesnelere Giriş'this' Anahtar KelimesiMetotlar ve ParametrelerAlanlar ve ÖzelliklerYapıcı MetotlarNesne BaşlatıcılarÖzet - Basit Hesap Makinesi4Kalıtım
Temel Kalıtım (:) Sözdizimi'base' Anahtar KelimesiVirtual ve Override Anahtar KelimeleriSealed Sınıflar'object' Temel SınıfıÖzet - Çalışan Hiyerarşisi7İleri Düzey Özellikler
Operatör Aşırı Yüklemeİndeksleyiciler (this[])ToString() Geçersiz KılmaGenişletme MetotlarıÖzet - Özel Liste10Tasarım Kalıpları Bölüm 1
Tasarım Kalıplarına GirişThread-Safe SingletonFactory KalıbıObserver Kalıbı (Olaylar)Strategy Kalıbı2Özellikler ve Statik Üyeler
Otomatik Uygulanan ÖzelliklerSadece Okunur/Yazılır ÖzelliklerStatik Alanlar ve MetotlarStatik Sınıflarİfade Gövdeli Üyeler5Polimorfizm ve Arayüzler
Derleme vs Çalışma Zamanı PolimorfizmiArayüz vs Soyut SınıfÇoklu ArayüzlerBelirgin ArayüzlerUpcasting ve DowncastingÖzet - Şekil Hesaplayıcı8İleri Düzey OOP Kavramları
Kalıtım yerine KompozisyonGenerics (Sınıflar ve Metotlar)Delegates ve EventlerAttributes ve ReflectionIDisposable ve using İfadesiDependency Injection Temelleri11Tasarım Kalıpları Bölüm 2
Komut KalıbıAdaptör KalıbıDekoratör KalıbıŞablon Metot KalıbıDurum KalıbıKompozit Kalıbı3Sınıf Mimarisi
Örnek vs Statik Veri'readonly' ve 'const' Anahtar KelimeleriDestekleyici Alanlar (Backing Fields)Özet - Banka Hesabı Yöneticisi6Kapsülleme
Erişim BelirleyicilerKapsülleme için ÖzelliklerVeri Gizleme UygulamasıDeğişmezlik KalıplarıÖzet - Öğrenci Kayıtları