Yükleniyor...

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ı


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ı


TL;DR

  • Extension metotlar, var olan sınıflara yeni işlevler eklemenin bir yoludur.
  • static bir sınıfta tanımlanır, ilk parametre this ile 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# 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# String İşlemleri

C#’ta string işlemlerini öğrenin: birleştirme, arama, substring, IndexOf ve diğer temel string metotlarını örneklerle keşfedin.