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(); // 3this 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); // trueBu 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.
Görev
KolayTü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:IntExtensionsad alanındaUtilitiesadlı statik bir sınıf oluşturun. Bu sınıf,inttürünü geliştiren genişletme metotlarını içerecek:IsEven()- sayı çiftsetrue, aksi takdirdefalsedöndürürSquare()- sayının kendisiyle çarpımını döndürürIsInRange(int min, int max)- sayı min ve max arasındaysa (sınırlar dâhil)true, aksi takdirdefalsedöndürür
thisanahtar 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]? Truenumber.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}
}
}
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ıKendi başına pratik yap: Online C# derleyicisi