Genişletme Yöntemlerini Tanımlama
this değiştiricisini kullanan statik yöntemler yazın.
Genişletme Yöntemlerini Tanımlama, CoddyKit'te ücretsiz bir C# Academy dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C# Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C# Academy kursu toplamda 4 dersten oluşur.
Genişletme Yöntemi Nedir?
Genişletme yöntemi, mevcut bir türü değiştirmeden veya türetilmiş bir tür oluşturmadan ona yeni yöntemler eklemenizi sağlar. Bu yöntemi bir örnek yöntemiymiş gibi çağırırsınız; ancak gerçekte bu, özel bir static yöntemdir.
Genişletmeler, bir türün (örneğin string veya int) kaynak koduna sahip olmadığınız hâlde ona kullanışlı yeni bir davranış kazandırmak istediğiniz durumlar için idealdir.
Üç Gereklilik
Bir genişletme yöntemi bildirmek için şunlar gerekir: bir statik sınıf, bir statik yöntem ve this anahtar sözcüğüyle işaretlenmiş birinci parametre. this parametresi, genişlettiğiniz türü belirtir.
using System;
public static class StringExtensions
{
public static int WordCount(this string text)
{
if (string.IsNullOrWhiteSpace(text)) return 0;
return text.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).Length;
}
}
public class Program
{
public static void Main()
{
string sentence = "the quick brown fox";
Console.WriteLine(sentence.WordCount());
}
}Örnek Yöntemi Gibi Çağırma
WordCount statik olsa da onu sentence.WordCount() şeklinde çağırırsınız. Derleyici, bu çağrıyı arka planda StringExtensions.WordCount(sentence) biçimindeki çağrıya dönüştürür.
using System;
using System.Linq;
public static class StringExtensions
{
public static string Repeat(this string text, int times)
{
return string.Concat(Enumerable.Repeat(text, times));
}
}
public class Program
{
public static void Main()
{
// These two lines do exactly the same thing
Console.WriteLine("ab".Repeat(3));
Console.WriteLine(StringExtensions.Repeat("ab", 3));
}
}Bu Parametre Örneği Alır
Noktanın solundaki değer, this parametresine dönüşür. Bundan sonra başka parametreler ekleyebilirsiniz; çağrıyı yapanlar bu parametreleri normal biçimde geçirir.
using System;
public static class IntExtensions
{
public static bool IsBetween(this int value, int low, int high)
{
return value >= low && value <= high;
}
}
public class Program
{
public static void Main()
{
int age = 25;
Console.WriteLine(age.IsBetween(18, 65));
Console.WriteLine(10.IsBetween(1, 5));
}
}Kendi Türlerinizi Genişletme
Genişletmeler yalnızca kitaplık türleri için kullanılmaz. Kendi sınıflarınızı da genişletebilirsiniz. Böylece temel türünüzü sade tutarken yardımcı davranışları başka yerlere ekleyebilirsiniz.
using System;
public class Money
{
public decimal Amount { get; }
public Money(decimal amount) { Amount = amount; }
}
public static class MoneyExtensions
{
public static string ToUsd(this Money m) => "$" + m.Amount.ToString("0.00");
}
public class Program
{
public static void Main()
{
var price = new Money(19.5m);
Console.WriteLine(price.ToUsd());
}
}Genişletmeler Özel Üyelere Erişemez
Bir genişletme yöntemi başka bir sınıftaki sıradan bir statik yöntem olduğundan, türün yalnızca herkese açık (veya aynı derlemedeyse dahili) bölümünü kullanabilir. Özel alanlara erişemez.
using System;
public class Counter
{
private int _count;
public int Value => _count;
public void Increment() => _count++;
}
public static class CounterExtensions
{
// Can only use public members like Value and Increment
public static bool IsZero(this Counter c) => c.Value == 0;
}
public class Program
{
public static void Main()
{
var c = new Counter();
Console.WriteLine(c.IsZero());
c.Increment();
Console.WriteLine(c.IsZero());
}
}Genişletme Yöntemlerini Zincirleme
Her genişletme bir değer döndürdüğü için bunları akıcı bir işlem akışı oluşturacak şekilde zincirleyebilirsiniz. Bu akış yukarıdan aşağıya okunur ve LINQ'in kullandığı biçimdir.
using System;
public static class TextExtensions
{
public static string Shout(this string s) => s.ToUpper();
public static string Bang(this string s) => s + "!";
}
public class Program
{
public static void Main()
{
string result = "hello".Shout().Bang();
Console.WriteLine(result);
}
}Boş Değer ve Genişletme Yöntemleri
Gerçek bir örnek çağrısından farklı olarak bir genişletme yöntemi, alıcı null olsa bile çalışabilir; çünkü kodunuz alıcıya erişene kadar herhangi bir başvuru çözümlemesi yapılmaz. Bu sayede boş değerlere karşı güvenli yardımcılar yazabilirsiniz.
using System;
public static class StringExtensions
{
public static bool IsBlank(this string text)
{
// text may be null here, and that is fine
return string.IsNullOrWhiteSpace(text);
}
}
public class Program
{
public static void Main()
{
string nothing = null;
Console.WriteLine(nothing.IsBlank());
Console.WriteLine("x".IsBlank());
}
}Örnek Yöntemleri Genişletmelerden Önce Gelir
Eşleşen imzaya sahip gerçek bir örnek yöntemi varsa derleyici, genişletme yöntemi yerine her zaman onu tercih eder. Genişletmeler yalnızca türün henüz kapsamadığı boşlukları doldurur.
using System;
public static class Ext
{
// This will be ignored because string already has ToString()
public static string ToString(this string s, int n) => s + n;
}
public class Program
{
public static void Main()
{
// Resolves to the built-in instance ToString(), not the extension
Console.WriteLine("value: " + "abc".ToString());
}
}Uygulamalı Bir Yardımcı Kitaplık
İlişkili genişletmeleri tek bir statik sınıfta gruplamak düzenli bir yardımcı kitaplık oluşturur. Aşağıda, bir proje boyunca yeniden kullanabileceğiniz küçük bir sayısal yardımcı sınıfı verilmiştir.
using System;
public static class NumberExtensions
{
public static bool IsEven(this int n) => n % 2 == 0;
public static int Squared(this int n) => n * n;
public static double Percent(this int n) => n / 100.0;
}
public class Program
{
public static void Main()
{
Console.WriteLine(4.IsEven());
Console.WriteLine(5.Squared());
Console.WriteLine(50.Percent());
}
}Kendiniz Deneyin
Öğrendiklerinizi birleştirin: akıcı biçimde çağrılan, çeşitli amaçlara odaklanmış genişletmelere sahip tek bir statik sınıf oluşturun. Günlük kullanılan yardımcı kitaplıklar tam olarak bu şekilde geliştirilir.
using System;
public static class StringExtensions
{
public static string Capitalize(this string s)
=> string.IsNullOrEmpty(s) ? s : char.ToUpper(s[0]) + s.Substring(1);
public static string Surround(this string s, char c) => c + s + c;
}
public class Program
{
public static void Main()
{
Console.WriteLine("hello".Capitalize().Surround('*'));
}
}Hızlı Kontrol
Genişletme yöntemi bildirme konusundaki anlayışınızı sınayın.
Özet
Bir genişletme yönteminin, ilk parametresi this kullanan bir static sınıftaki static yöntem olduğunu öğrendiniz. Bu yöntem örnek söz dizimiyle çağrılır, ancak derleme sonucunda sıradan bir statik çağrıya dönüşür.
- Üç gereklilik: statik sınıf, statik yöntem ve ilk parametre olarak
this. - Yalnızca herkese açık üyelere erişilebilir.
- Örnek yöntemleri her zaman önceliklidir.
- Genişletmeler zincirlenebilir ve
nullalıcılar üzerinde bile çalışabilir.
Sıkça Sorulan Sorular
“Genişletme Yöntemlerini Tanımlama” dersi ücretsiz mi?
Evet — “Genişletme Yöntemlerini Tanımlama” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C# Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C# Academy kursu toplamda 4 dersten oluşur.
“Genişletme Yöntemlerini Tanımlama” dersinde ne öğreneceğim?
this değiştiricisini kullanan statik yöntemler yazın. C# Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
C# Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te C# Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.
“Genişletme Yöntemlerini Tanımlama” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu C# Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her C# Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Genişletme Yöntemlerini Tanımlama
- Arabirimleri ve Generics'i Genişletme
- Genişletme Yöntemi Çözümlemesi
- İyi Genişletmeler Tasarlama