Menu
Coddy logo textTech

'object' Temel Sınıfı

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

C#'ta, oluşturduğunuz her sınıf otomatik olarak object adındaki özel bir sınıftan türetilir. Bir temel sınıfı açıkça belirtmeseniz bile, sınıfınızın en üst atası yine de object sınıfıdır. Bu, C#'taki her türün ortak bir metot kümesini paylaştığı anlamına gelir.

object sınıfı, kendi sınıflarınızda geçersiz kılabileceğiniz (override) birkaç sanal metot sağlar:

public class Person
{
    public string Name { get; set; }
    
    // object sınıfından geçersiz kılma
    public override string ToString()
    {
        return $"Person: {Name}";
    }
    
    public override bool Equals(object obj)
    {
        if (obj is Person other)
            return Name == other.Name;
        return false;
    }
    
    public override int GetHashCode()
    {
        return Name?.GetHashCode() ?? 0;
    }
}

En yaygın geçersiz kılınan üç yöntem; dize temsili için ToString(), nesneleri karşılaştırmak için Equals() ve karma tabanlı koleksiyonlar için GetHashCode() yöntemleridir. Varsayılan olarak, ToString() tür adını döndürür ve Equals() referans eşitliğini kontrol eder.

Her şey object türünden miras aldığı için, herhangi bir türü bir object değişkeninde saklayabilirsiniz:

object item1 = new Person { Name = "Alice" };
object item2 = 42;
object item3 = "Hello";

Console.WriteLine(item1.ToString());  // Person: Alice

Bu evrensel temel sınıf, karışık türleri barındıran koleksiyonlar gibi özellikleri mümkün kılan şeydir ve C#'taki her nesnenin ToString() ve GetType() gibi metotlara erişebilmesinin nedenidir.

challenge icon

Görev

Kolay

object temel sınıfından metotları geçersiz kılmanın (overriding), özel türlerinize dize gösterimi ve eşitlik kontrolü için nasıl anlamlı davranışlar kazandırdığını gösteren bir kitap karşılaştırma sistemi oluşturalım.

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

  • Book.cs: Library ad alanı (namespace) içinde bir Book sınıfı tanımlayın. Kitabınızın Title (string) ve Author (string) özelliklerinin yanı sıra her iki değeri de ayarlayan bir yapıcı metodu (constructor) olmalıdır. object sınıfından miras alınan üç ana metodu geçersiz kılın:

    • ToString() metodu "{Title} by {Author}" döndürmelidir
    • Equals(object obj) metodu, eğer diğer nesne aynı Title ve Author değerlerine sahip bir Book ise true döndürmelidir
    • GetHashCode() metodu, her iki özelliğin karma kodlarını (hash codes) birleştirmelidir
  • Program.cs: Ana dosyanızda, giriş değerlerini kullanarak iki kitap oluşturun. Her kitabı ToString() kullanarak görüntüleyin, ardından eşit olup olmadıklarını kontrol edin ve sonucu yazdırın. Son olarak, bir Book nesnesini bir object değişkeninde saklayabileceğinizi ve ToString() çağrıldığında hala anlamlı bir çıktı alabildiğinizi gösterin.

Dört giriş alacaksınız:

  • Birinci kitabın başlığı
  • Birinci kitabın yazarı
  • İkinci kitabın başlığı
  • İkinci kitabın yazarı

Çıktıyı şu formatta yazdırın:

Book 1: {ToString result}
Book 2: {ToString result}
Are they equal? {True/False}
Stored as object: {ToString result of first book stored in object variable}

Örneğin, girişler 1984, George Orwell, 1984 ve George Orwell ise çıktı şöyle olmalıdır:

Book 1: 1984 by George Orwell
Book 2: 1984 by George Orwell
Are they equal? True
Stored as object: 1984 by George Orwell

Girişler 1984, George Orwell, Brave New World ve Aldous Huxley ise çıktı şöyle olmalıdır:

Book 1: 1984 by George Orwell
Book 2: Brave New World by Aldous Huxley
Are they equal? False
Stored as object: 1984 by George Orwell

Geçersiz kıldığınız metotların Book nesnelerine nasıl anlamlı davranışlar kazandırdığına dikkat edin - dize olarak güzelce görüntüleniyorlar ve sadece bellek referanslarına göre değil, içeriklerine göre karşılaştırılabiliyorlar!

Kopya kağıdı

C#'ta her sınıf, geçersiz kılınabilen (overridden) birkaç sanal yöntem sağlayan object sınıfından otomatik olarak türetilir:

Geçersiz Kılınacak Yaygın Nesne Yöntemleri

  • ToString() - Nesnenin dize temsilini döndürür (varsayılan olarak tür adını döndürür)
  • Equals(object obj) - Nesneleri eşitlik için karşılaştırır (varsayılan olarak referans eşitliğini kontrol eder)
  • GetHashCode() - Karma tabanlı koleksiyonlarda kullanılmak üzere bir karma kodu döndürür

Nesne Yöntemlerini Geçersiz Kılma

public class Person
{
    public string Name { get; set; }
    
    // Özel dize temsili için ToString'i geçersiz kılın
    public override string ToString()
    {
        return $"Person: {Name}";
    }
    
    // İçerik tabanlı karşılaştırma için Equals'ı geçersiz kılın
    public override bool Equals(object obj)
    {
        if (obj is Person other)
            return Name == other.Name;
        return false;
    }
    
    // Karma tabanlı koleksiyonlar için GetHashCode'u geçersiz kılın
    public override int GetHashCode()
    {
        return Name?.GetHashCode() ?? 0;
    }
}

Evrensel Temel Sınıf

Herhangi bir tür bir object değişkeninde saklanabilir:

object item1 = new Person { Name = "Alice" };
object item2 = 42;
object item3 = "Hello";

Console.WriteLine(item1.ToString());  // Person: Alice

Bu evrensel kalıtım, karışık türleri tutan koleksiyonlara olanak tanır ve her nesnenin ToString() ve GetType() gibi yöntemlere erişebilmesini sağlar.

Kendin dene

using System;
using Library;

class Program
{
    public static void Main(string[] args)
    {
        // İki kitap için girişleri oku
        string title1 = Console.ReadLine();
        string author1 = Console.ReadLine();
        string title2 = Console.ReadLine();
        string author2 = Console.ReadLine();

        // TODO: Giriş değerlerini kullanarak iki Book nesnesi oluştur

        // TODO: ToString() kullanarak Book 1'i yazdır
        // Format: "Book 1: {ToString result}"

        // TODO: ToString() kullanarak Book 2'yi yazdır
        // Format: "Book 2: {ToString result}"

        // TODO: Kitapların eşit olup olmadığını kontrol et ve sonucu yazdır
        // Format: "Are they equal? {True/False}"

        // TODO: İlk kitabı bir object değişkeninde sakla ve yazdır
        // Format: "Stored as object: {ToString result}"
    }
}
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