C# Extension Metotlar
C#’ta extension metotları öğrenin. Mevcut sınıfları değiştirmeden yeni metotlar eklemeyi örneklerle keşfedin.
C# dilinde extension metotlar, mevcut sınıflara veya yapılara (struct)
yeni metotlar eklemenin bir yoludur.
Bu metotlar aslında static bir sınıf içinde tanımlanır ve
ilk parametresi this anahtar sözcüğü ile genişletilen tipi gösterir.
Extension metotlar, var olan sınıfları değiştirmeden onların işlevselliğini artırmaya yarar.
Temel Sözdizimi
Bir extension metot mutlaka static bir sınıf içinde tanımlanır.
İlk parametresi this ile işaretlenir ve hangi tipe eklendiğini belirtir.
// Extension metodun tanımı
public static class StringExtensions
{
public static bool IsNullOrEmpty(this string? text)
{
return string.IsNullOrEmpty(text);
}
}
class Program
{
static void Main()
{
string s1 = null;
string s2 = "Merhaba";
Console.WriteLine(s1.IsNullOrEmpty()); // True
Console.WriteLine(s2.IsNullOrEmpty()); // False
}
}
Burada IsNullOrEmpty metodu aslında StringExtensions içinde tanımlıdır,
ama string tipine aitmiş gibi kullanılabilir.
Extension Metotların Kullanım Alanları
- Mevcut sınıflara yeni işlevler eklemek (örn.
string,DateTime). - Ortak yardımcı (helper) metotları daha doğal bir sözdizimiyle çağırmak.
- LINQ gibi akıcı (fluent) kod yazımını kolaylaştırmak.
Pratik Örnekler
Extension metotlarla günlük hayatta sık kullanılan işlemler daha okunaklı hale getirilebilir.
// Sayıları kontrol eden extension
public static class IntExtensions
{
//Sayı çift mi?
public static bool IsEven(this int number) => number % 2 == 0;
//Sayı tek mi?
public static bool IsOdd(this int number) => number % 2 != 0;
}
class Program
{
static void Main()
{
int x = 10;
Console.WriteLine(x.IsEven()); // True
Console.WriteLine(x.IsOdd()); // False
}
}
Burada IsEven ve IsOdd metotları int sınıfına aitmiş gibi tanımlanmıştır. int bir veri türünde tanımlanan değişken doğrudan bu metotları kullanabilir.
// DateTime için extension
public static class DateTimeExtensions
{
// Tarih değerinin haftasonu olup olmadığını kontrol eden bir extension metot
public static bool IsWeekend(this DateTime dt)
=> dt.DayOfWeek == DayOfWeek.Saturday || dt.DayOfWeek == DayOfWeek.Sunday;
}
class Program
{
static void Main()
{
DateTime today = DateTime.Now;
Console.WriteLine(today.IsWeekend() ? "Hafta sonu" : "Hafta içi");
}
}
LINQ ve Extension Metotlar
LINQ yöntemlerinin tamamı extension metotlar olarak tanımlanmıştır.
Örneğin Where, Select, OrderBy gibi metotlar
aslında IEnumerable<T> için yazılmış extension metotlardır.
var numbers = new List<int> { 1, 2, 3, 4, 5, 6 };
// Where aslında bir extension metodudur
var evens = numbers.Where(n => n % 2 == 0);
Console.WriteLine(string.Join(", ", evens)); // 2, 4, 6
Örnek: String Manipülasyonu
Bir metin üzerinde çeşitli kontroller ve düzenlemeler yapmak için extension metotlar tanımlayalım.
public static class TextExtensions
{
//String veri türü için bir metni başlık gibi baş harfleri büyük hale getiren extension metot
public static string ToTitleCase(this string text)
{
if (string.IsNullOrWhiteSpace(text)) return string.Empty;
return string.Join(" ",
text.Split(' ', StringSplitOptions.RemoveEmptyEntries)
.Select(w => char.ToUpper(w[0]) + w.Substring(1).ToLower()));
}
//String veri türü için metnin rakam içerip içermediğini kontrol edip bool olarak döndüren extension metot
public static bool ContainsDigit(this string text)
{
return text.Any(char.IsDigit);
}
}
class Program
{
static void Main()
{
string input = "merhaba dünya 2025";
Console.WriteLine(input.ToTitleCase()); // "Merhaba Dünya 2025"
Console.WriteLine(input.ContainsDigit()); // True
}
}
Avantajları
- Kod okunabilirliğini artırır, doğal sözdizimi sağlar.
- Yeni sınıf tanımlamadan mevcut sınıfların kullanılabilmesini sağlar.
- Mevcut sınıflara dokunmadan yeni özellikler kazandırır.
- Yardımcı metotları merkezi bir yerde toplamak mümkündür.
TL;DR
- Extension metotlar, var olan sınıflara yeni işlevler eklemenin bir yoludur.
staticbir sınıfta tanımlanır, ilk parametrethisile genişletilen tipi belirtir.- LINQ yöntemleri extension metotların en bilinen örnekleridir.
- Kod okunabilirliğini artırır, esnekliği yükseltir.
İlişkili Makaleler
C# ile SOLID Prensipleri
C# örnekleriyle SOLID prensiplerinin uygulanışı: daha esnek, sürdürülebilir ve test edilebilir kod tasarımları.
C# Interface ve Abstract Sınıflar
C#’ta interface ve abstract sınıfları öğrenin. Farklarını, ne zaman hangisini kullanacağınızı ve tasarım senaryolarını örneklerle keşfedin.
C# Lambda İfadeleri
C#’ta lambda ifadelerini öğrenin. Kısa sözdizimi, Func ve Action kullanımı ile LINQ sorgularında pratik örnekler keşfedin.
C# Metotlar ve Parametre Kullanımı
C#’ta metot tanımlama ve parametre kullanımını öğrenin. Değer ve referans parametreleri, varsayılan parametreler ve örneklerle.
C# Namespace ve Assembly Kavramı
C#’ta namespace ve assembly kavramlarını öğrenin. Kodun düzenlenmesi, bağımlılık yönetimi ve proje yapısı örneklerle anlatılıyor.
C# String İşlemleri
C#’ta string işlemlerini öğrenin: birleştirme, arama, substring, IndexOf ve diğer temel string metotlarını örneklerle keşfedin.