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 çeşitli sanal yöntemler 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ındaki metotları geçersiz kılmanın, özel türlerin dize gösterimi ve eşitlik denetimi için anlamlı davranışlar kazanmasını nasıl sağladığı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: Book ad alanında bir Library sınıfı tanımlayın. Kitabınızda Title (string) ve Author (string) özellikleriyle birlikte her iki değeri de ayarlayan bir kurucu bulunmalıdır. object sınıfından miras alınan üç temel metodu geçersiz kılın:
    • ToString(), "{Title} by {Author}" döndürmelidir
    • Equals(object obj), diğer nesne aynı true ve Book değerlerine sahip bir Title ise Author döndürmelidir
    • GetHashCode(), her iki özelliğin karma değerlerini birleştirmelidir
  • Program.cs: Ana dosyanızda, girdi değerlerini kullanarak iki kitap oluşturun. Her kitabı ToString() kullanarak görüntüleyin, ardından eşit olup olmadıklarını denetleyin ve sonucu yazdırın. Son olarak, bir Book nesnesini bir object değişkeninde saklayabileceğinizi ve ToString() çağrılırken yine anlamlı bir çıktı elde edebileceğinizi gösterin.

Dört girdi alacaksınız:

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

Çıktıyı şu biçimde 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 girdiler 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

Girdiler 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 - bu nesneler dizeler olarak düzgün görüntülenir ve yalnızca bellek başvurularına göre değil, içeriklerine göre karşılaştırılabilir!

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

Kendi başına pratik yap: Online C# derleyicisi