Menu
Coddy logo textTech

Genişletme Metotları

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

Genişletme metotları, kaynak kodlarını değiştirmeden veya türetilmiş sınıflar oluşturmadan mevcut türlere yeni metotlar eklemenizi sağlar. Bu metotlar, türün yerleşik metotlarıymış gibi görünerek kodunuzu daha okunabilir ve sezgisel hâle getirir.

Bir genişletme yöntemi oluşturmak için, ilk parametresinin önüne this anahtar sözcüğü getirilmiş bir statik sınıf içinde statik bir yöntem tanımlayın:

public static class StringExtensions
{
    public static int WordCount(this string str)
    {
        return str.Split(' ').Length;
    }
}

Artık bu yöntemi doğrudan herhangi bir dize üzerinde çağırabilirsiniz:

string sentence = "Hello World Today";
int count = sentence.WordCount();  // 3

this string str parametresi, derleyiciye bu metodun string türünü genişlettiğini bildirir. sentence.WordCount() çağrısını yaptığınızda derleyici, bunu arka planda StringExtensions.WordCount(sentence) şeklinde çevirir.

Genişletme metotları ek parametreleri de kabul edebilir:

public static bool IsLongerThan(this string str, int length)
{
    return str.Length > length;
}

// Kullanım
bool result = "Hello".IsLongerThan(3);  // true

Bu teknik, Where() ve Select() gibi yöntemlerin IEnumerable üzerinde genişletme yöntemleri olarak kullanıldığı LINQ'te yaygın olarak kullanılır. Genişletme yöntemleri, denetlemediğiniz türlere yardımcı işlevler eklemek için güçlüdür ve kodunuzu temiz ve ifade gücü yüksek tutar.

challenge icon

Görev

Kolay

Tümleşik olarak bulunmasını bekleyeceğiniz kullanışlı işlevler ekleyen bir dizi tamsayı genişletme metodu oluşturalım. Doğrudan herhangi bir tamsayı üzerinde çağrılabilen ve kodunuzu daha ifade edici ve okunabilir hâle getiren genişletme metotlarını içeren statik bir sınıf oluşturacaksınız.

Kodunuzu iki dosya arasında düzenleyeceksiniz:

  • IntExtensions.cs: IntExtensions ad alanında Utilities adlı statik bir sınıf oluşturun. Bu sınıf, int türünü geliştiren genişletme metotlarını içerecek:
    • IsEven() - sayı çiftse true, aksi takdirde false döndürür
    • Square() - sayının kendisiyle çarpımını döndürür
    • IsInRange(int min, int max) - sayı min ve max arasındaysa (sınırlar dâhil) true, aksi takdirde false döndürür
    Genişletme metotlarının statik bir sınıf içindeki statik metotlar olması ve genişlettiğiniz türü belirtmek için ilk parametrede this anahtar sözcüğünü kullanması gerektiğini unutmayın.
  • Program.cs: Ana dosyanızda girdiden bir tamsayı okuyun ve üç genişletme metodunun tümünü gösterin. Her metodu, yerleşik bir metotmuş gibi doğrudan tamsayı üzerinde çağırın ve ardından sonuçları yazdırın.

Üç girdi alacaksınız:

  • Test edilecek sayı (tamsayı)
  • Aralık kontrolü için minimum değer (tamsayı)
  • Aralık kontrolü için maksimum değer (tamsayı)

Çıktıyı şu biçimde yazdırın:

Is {number} even? {True/False}
Square of {number}: {result}
Is {number} in range [{min}-{max}]? {True/False}

Örneğin girdiler 7, 5 ve 10 ise çıktı şu şekilde olmalıdır:

Is 7 even? False
Square of 7: 49
Is 7 in range [5-10]? True

number.IsEven() ve number.Square() ifadelerini ne kadar doğal bir şekilde yazabildiğinize dikkat edin - genişletme metotları, sanki her zaman tamsayı türünün bir parçasıymış gibi hissettirir!

Kendin dene

using System;
using Utilities;

class Program
{
    public static void Main(string[] args)
    {
        // Girdileri oku
        int number = Convert.ToInt32(Console.ReadLine());
        int min = Convert.ToInt32(Console.ReadLine());
        int max = Convert.ToInt32(Console.ReadLine());

        // TODO: 'number' üzerinde genişletme metotlarını kullan ve sonuçları yazdır
        // number.IsEven(), number.Square() ve number.IsInRange(min, max) metodlarını çağır
        // Şu formatta yazdır:
        // {number} çift mi? {True/False}
        // {number} karesi: {result}
        // {number} [{min}-{max}] aralığında mı? {True/False}

    }
}
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