Berk Akademi
Birebir ders başvurusu Ücretsiz ön görüşme Ana Sayfa

C# 14 Extension Members Nedir? Uzantı Üyeleri Nasıl Kullanılır?

c-sharp-14-extension-members-nedir-uzanti-uyeleri-nasil-kullanilir
Bu yazıda neler var?
  1. C# 14 Extension Members Nedir? Kısa ve Doğrudan Yanıt
  2. Extension Method ile Extension Members Arasındaki Fark Nedir?
  3. Uzantı Üyeleri Nasıl Kullanılır? Kısa C# Örneği
  4. Derleyici, SDK ve Dil Sürümü Nasıl Kontrol Edilir?
  5. Klasik Extension Method Hangi Durumlarda Daha Anlaşılırdır?
  6. Sık Sorulan Sorular

C# 14 Extension Members, mevcut bir sınıfın veya arayüzün kaynak kodunu değiştirmeden, o tür için yeni üyeleri dışarıdan tanımlayıp türün kendi üyesiymiş gibi kullanmayı sağlayan yaklaşımdır. Extension method bilenler için temel yenilik, alıcı türü her yöntemin ilk parametresinde tekrarlamak yerine extension bloğunda belirtmek ve aynı alıcıya bağlı birden fazla üyeyi birlikte tanımlayabilmektir.

Bu yaklaşım yalnızca yöntem tanımlama sözdizimini değiştirmez. Özellikleri ve kullanıcı tanımlı işleçleri de extension block içinde tanımlamaya, ayrıca bir türün kendisine aitmiş gibi görünen statik uzantılar oluşturmaya olanak verir. Böylece kullanım noktası nesne üzerinden değer.Metot() biçiminde veya uygun durumda tür üzerinden erişim biçiminde olabilir.

C# 14 Extension Members Nedir? Kısa ve Doğrudan Yanıt

C# 14 Extension Members, extension bloklarıyla mevcut türlerin davranışını ve erişilebilir üye yüzeyini genişletme yöntemidir. C# 14 kapsamındaki temel üye türleri şunlardır:

  • Yöntemler: Bir nesnenin instance üyesi gibi çağrılan yöntemler veya tür üzerinden erişilen statik uzantı yöntemleri.
  • Özellikler: Alıcı nesnenin özelliği gibi okunan instance özellikleri veya türün statik özelliği gibi kullanılan özellikler.
  • İşleçler: Uzatılan tür için extension block içinde tanımlanan kullanıcı tanımlı işleçler.

Instance uzantılarda alıcı parametresine bir ad verilir. Örneğin extension(string text) ifadesindeki text, blok içindeki instance üyelerin eriştiği değeri belirtir. Yalnızca statik uzantılar tanımlanacaksa alıcı parametresinin adı yazılmadan extension(string) biçimi kullanılabilir. Uzantı üyeleri yine dışarıda, üst düzey ve generic olmayan bir static class içinde tanımlanır.

Extension Method ile Extension Members Arasındaki Fark Nedir?

Extension Method ile Extension Members Arasındaki Fark Nedir?

İki yaklaşımın kullanım kodunda ortak bir yön vardır: Bir instance yöntemi, tanımlandığı türün üyesi gibi nokta gösterimiyle çağrılır. Örneğin string için yazılan WordCount yöntemi her iki modelde de metin.WordCount() biçiminde kullanılabilir. Asıl fark, üyenin nasıl tanımlandığı ve yöntem dışındaki üye türlerine erişilip erişilemediğidir.

Ölçüt Klasik extension method Extension Members yaklaşımı
Tanım sözdizimi İlk parametre this ile işaretlenir: public static int WordCount(this string value) Alıcı, blokta tanımlanır: extension(string value) { public int WordCount() ... }
Alıcı tür Her yöntem kendi ilk parametresinde alıcı türü taşır. Alıcı türü extension block belirtir; aynı alıcıya bağlı üyeler blok içinde toplanabilir.
Desteklenen üyeler Yalnızca yöntemler tanımlanır. Yöntemler, özellikler ve kullanıcı tanımlı işleçler tanımlanabilir.
Instance ve static kapsam Uzantı, nesne üzerinden instance method gibi çağrılır; tanımın kendisi statik bir yöntemdir. Adlandırılmış alıcıyla instance üyeler, alıcı adı olmadan yazılan blokla türün statik üyeleri tanımlanabilir.
Üyeleri gruplama Alıcı parametresi her yöntemde yeniden yazılır. Aynı alıcıyı kullanan yöntem, özellik ve işleçler tek blokta birlikte ifade edilebilir.
Okunabilirlik Tek ve küçük bir yardımcı yöntem için kısa, tanıdık bir yapı sunar. Birden fazla ilişkili üyeyi aynı tür etrafında toplamak için daha açıklayıcı bir yapı sunabilir.

Karar çerçevesi: Sadece tek bir instance yöntemi ekliyorsan klasik biçim yeterince açık olabilir. Aynı alıcı için bir özellik veya işleç de tanımlamak, ya da doğrudan tür üzerinden kullanılan statik bir uzantı oluşturmak istiyorsan extension block daha geniş bir ifade alanı sağlar. Bu, yeni sözdiziminin her durumda daha iyi olduğu anlamına gelmez; mevcut kodun tutarlılığı ve tanımlanan üyelerin ilişkisi de değerlendirilmelidir.

Uzantı Üyeleri Nasıl Kullanılır? Kısa C# Örneği

Uzantı Üyeleri Nasıl Kullanılır? Kısa C# Örneği

C# 14'te uzantı üyeleri, extension bloğu içinde tanımlanır. Bu blok, üst düzey, jenerik olmayan bir static class içinde yer alır. Uzatılan tür, extension(...) satırında belirtilir. Alıcı parametresine bir ad verdiğinde, blok içindeki üyeler bu adı kullanarak ilgili nesneye erişebilir.

using System;
using Sample.Extensions;

namespace Sample.Extensions
{
    public static class StringExtensions
    {
        extension(string text)
        {
            public int WordCount() =>
                text.Split(new[] { ' ', '.', '?' },
                    StringSplitOptions.RemoveEmptyEntries).Length;
        }
    }
}

namespace Sample
{
    public class Program
    {
        public static void Main()
        {
            var sentence = "C# extension members";
            Console.WriteLine(sentence.WordCount());
        }
    }
}

Örnekte text, uzatılan string değerini temsil eder. using Sample.Extensions; bildirimi, uzantı sınıfının bulunduğu ad alanını çağıran koda açar. Çağrı biçimi ise sentence.WordCount() şeklindedir. Yeni sözdizimi kullanılsa da çağıran kod, uzantı üyesini nesnenin kendi metodu gibi kullanır.

Beklenen çıktı:

3

extension bloğunu tanımayan bir derleyici bu kodu başarılı biçimde derleyemez. Derleme aşamasında karşılaşılacak tanı, kullanılan SDK, derleyici ve geliştirme ortamına göre değişebilir.

Derleyici, SDK ve Dil Sürümü Nasıl Kontrol Edilir?

Uzantı üyelerini kullanmadan önce yalnızca IDE'nin kodu renklendirmesine güvenme. C# dil sürümünü, projenin hedef framework ayarını ve komut satırında kullanılan SDK'yı birlikte kontrol et. C# 14,.NET 10 ve üzeri hedeflerle eşleştirilir. Özellikleri kullanmak için.NET 10 SDK veya C# 14'ü destekleyen Visual Studio 2026 kullanılabilir. C# 14 yayımlanmış bir dil sürümü olduğu için bu örnekte preview ayarı gerekmez.

  1. Kurulu SDK'yı kontrol et: Terminalde dotnet --list-sdks komutuyla kurulu SDK'ları, dotnet --version ile seçilen SDK sürümünü, dotnet --info ile ayrıntılı ortam bilgilerini görüntüle.
  2. Hedef framework'ü kontrol et: Projenin .csproj dosyasında TargetFramework değerinin C# 14 ile uyumlu bir hedefi gösterdiğini doğrula.
  3. Dil sürümünü kontrol et: Projede açık bir seçim gerekiyorsa LangVersion değerini 14.0 olarak belirt. latest değeri, farklı bilgisayarlarda farklı derleyici sürümlerine karşılık gelebileceği için güvenilir bir sabitleme yöntemi değildir.
  4. Geliştirme ortamını kontrol et: Visual Studio kullanıyorsan C# 14 ve.NET 10 desteği bulunan Visual Studio 2026 sürümünü kullan. Başka bir IDE kullanıyorsan IDE'nin projeyi doğru.NET SDK ile derlediğini doğrula.
  5. Temiz derleme yap: Önceki çıktıları kaldırıp projeyi yeniden derle ve örneği çalıştır.

Proje dosyasında açık bir hedef ve dil sürümü seçimi şu şekilde görünebilir:

<PropertyGroup>
  <TargetFramework>net10.0</TargetFramework>
  <LangVersion>14.0</LangVersion>
</PropertyGroup>

LangVersion belirtilmezse derleyici, varsayılan dil sürümünü hedef framework ile ilişkilendirir. Bu nedenle proje ayarındaki TargetFramework ve LangVersion değerlerinin birbiriyle uyumlu olması önemlidir.

dotnet clean
dotnet build
dotnet run

Yeni sözdizimini kullanmadan önce kodun çalıştığı SDK ve dil sürümünün özelliği desteklediğini doğrula.

Klasik Extension Method Hangi Durumlarda Daha Anlaşılırdır?

Yeni sözdizimi, klasik this parametreli uzantı yöntemini kullanımdan kaldırmaz. Eklenecek şey tek bir işlemse ve deger.Islem() çağrısı davranışı açıkça anlatıyorsa klasik yazım daha kısa ve anlaşılır kalabilir. İki sözdizimiyle tanımlanan örnek uzantı yöntemleri, çağıran kod açısından uyumludur.

Seçim yaparken şu soruları sırayla değerlendir:

  1. Bir işlem mi ekliyorsun? Tek bir davranış için klasik extension method yeterince açık olabilir.
  2. Özellik gibi okunacak bir değer mi ekliyorsun? Parametresiz bir hesaplamayı özellik olarak sunmak istiyorsan extension bloğunu değerlendirebilirsin.
  3. Üye türün kendisinden mi çağrılmalı? Static uzantı üyesi gerekiyorsa yeni sözdizimi bu olanağı sağlar.
  4. Araç zincirin uygun mu? Projenin hedef çerçevesi, seçilen dil sürümü ve derleyicisi yeni sözdizimini desteklemiyorsa klasik yöntemi korumak daha uygun olabilir.
  5. Okuyan kişi neyi daha kolay anlayacak? Yeni yazım çağrıyı veya tanımı belirginleştirmiyorsa sırf sözdizimini yenilemek için değişiklik yapman gerekmez.

İki yaklaşım aynı üst düzey, jenerik olmayan statik sınıfta birlikte kullanılabilir. Ancak aynı alıcı türü için aynı imzalı yöntemi iki kez tanımlamak çakışmaya yol açar. Bu nedenle mevcut yöntemleri topluca taşımak yerine, her üyenin işlevini ve projenin destek koşullarını ayrı ayrı değerlendir.

Sık Sorulan Sorular

C# 14 Extension Members ile klasik extension method arasındaki temel fark nedir?

Klasik yazım, statik bir yöntemin ilk parametresine this ekleyerek örneğe yönelik uzantı yöntemi tanımlar. extension bloğu ise yöntemlerin yanında uzantı özellikleri ve tür üzerinden çağrılan static üyeler tanımlamaya da olanak verir.

Extension Members kullanmak için hangi SDK, derleyici ve dil sürümü koşulları gerekir?

extension bloğunu derlemek için C# 14 sözdizimini anlayan bir derleyici gerekir;.NET 10 SDK bu desteği sağlar. Projede C# 14 seçili olmalı ve resmî destek koşullarına göre.NET 10 veya daha yeni bir hedef çerçeve kullanılmalıdır. SDK kurulu olsa bile projenin seçtiği SDK ve dil sürümü ayrıca kontrol edilmelidir.

Mevcut extension methodları Extension Members sözdizimine taşımak gerekir mi?

Hayır. Klasik yöntemler kullanılmaya devam edebilir ve yeni üyelerle aynı sınıfta bulunabilir. Bir örnek uzantı yöntemini yeni yazıma geçirmek mümkün olsa da yalnızca yeni sözdizimi var diye mevcut kodu değiştirmek gerekmez; aynı imzayı iki kez tanımlamamaya dikkat et.

Instance ve static extension members nasıl çağrılır?

Instance üye, uygun alıcı değerin üzerinden çağrılır: deger.Yontem() veya deger.Ozellik. Static uzantı üyesi ise alıcı türün adı üzerinden çağrılır: Tur.Uye() veya Tur.Ozellik. Çağrı için uzantı sınıfının bulunduğu ad alanının kapsamda olması gerekir.

Klasik extension method hangi durumlarda daha anlaşılır kalır?

Yalnızca tek bir işlem ekliyorsan, yeni bir üye türüne ihtiyaç duymuyorsan veya mevcut araç zincirini değiştirmek istemiyorsan klasik yazım uygun olabilir. Kararı sözdiziminin yeniliğine göre değil, kodun okunabilirliğine ve projenin koşullarına göre ver.

İyi seçim, ihtiyaç duyduğun üyeyi destekleyen ve projede anlaşılır kalan yazımdır.

Bu içerik aradığın cevabı verdi mi?
Yanıtın, hangi yazıları geliştirmemiz gerektiğini anlamamıza yardımcı olur.
Bu içeriğin üretilmesinde yapay zeka araçlarından destek alınmıştır.

Bu konudan sonra ne okuyabilirsin?

Tüm yazılar

İlgili Eğitimler

Berk Keskin, yazılım geliştirici ve eğitmen
Yazar

Berk Keskin Kimdir?

Yazılıma 12 yaşında başladı; İzmir Ekonomi Üniversitesi'ni bölüm birincisi ve yüksek şeref öğrencisi olarak tamamladı. Bugün yalnızca eğitim vermekle kalmıyor, sektörde aktif olarak yazılım projeleri geliştiriyor ve gerçek dünya deneyimini birebir derslerine taşıyor. Ezberden uzak, mühendislik zihniyetini merkeze alan sürdürülebilir öğrenme sistemleri tasarlayarak sorgulayan, üreten ve problem çözebilen yeni nesil yazılımcılar yetiştiriyor.

Sektörel Deneyim & Projeler

  • Ticarify Entegrasyon Yazılım logosu CEO Ticarify Entegrasyon YazılımPazaryerleri ve e-ticaret sitelerine otomatik e-fatura kesimi, sipariş ve kargo takibi hizmetleri sunan e-Dönüşüm platformunun API mimarisini ve yazılım ekibini yönetmektedir.
  • Benim Düğünüm logosu CEO Benim DüğünümDijital etkinlik ve anı paylaşım platformu.
  • Siberdizayn logosu Yazılım Ekibi Lideri SiberdizaynYüksek anlık oyuncu trafiğine sahip oyun kontrol panelleri ve sunucu altyapıları geliştiren yazılım ekibine liderlik etmektedir.
  • MEDYOGRAFYA 360° Dijital Çözümler logosu Dijital Strateji Lideri MEDYOGRAFYA 360° Dijital ÇözümlerŞirketlerin dijital çözümlerde uzun vadede nasıl ilerlemesi gerektiği ve dijital dönüşüm süreçlerinin yönetilmesine destek olmaktadır.
  • İzmir Ekonomi Üniversitesi logosu Danışma Kurulu Üyesi İzmir Ekonomi ÜniversitesiMezun olduğu üniversitesinde, Bilgisayar Programcılığı bölümünün akademik müfredatını güncel sektör ihtiyaçlarına göre şekillendirmek adına Danışma Kurulu'nda görev almaktadır.
WhatsApp Hemen Ara