C# 14'te Yeni alan Anahtar Kelimesi
C#'daki otomatik özellikler kısadır, ancak bir ayarlayıcıda doğrulama veya dönüşüm mantığına ihtiyaç duyduğunuz an, onları tamamen terk etmeli ve bir manuel yedek alanla tam bir özellik yazmalısınız. Bu, tek bir koruma maddesi eklemek için yedi satıra geçmek oldukça ağır bir vergidir. C# 14, o boşluğu kapatmak için field anahtar kelimesini tanıtarak, derleyicinin yine de sizin için destek alanını yönetmesine izin verirken bir getter veya setter'ı özelleştirmenizi sağlar.
"C# 14'teki Yeni Alan Anahtar Kelimesi" videosunda, Tim Corey bu özelliğin çözdüğü sorunu gösterir, ayarlayıcı doğrulamasının pratik örneklerinden geçer ve yükseltmeye başlamadan önce bilmeniz gereken bir adlandırma çakışmasını kapsar. Her adımı ayrıntılı olarak takip edeceğiz, böylece field'i kendi özelliklerinizde güvenle kullanmaya başlayabilirsiniz.
Ayar: Basit Bir Kişi Modeli
[0:12 - 1:07] Tim, .NET 10 ve Visual Studio 2026'da çalışan bir konsol uygulamasıyla başlıyor. Demo, birkaç özelliği olan Person sınıfı üzerinde odaklanıyor:
public required string FirstName { get; set; }
public required string LastName { get; set; }
public int Age { get; set; }public required string FirstName { get; set; }
public required string LastName { get; set; }
public int Age { get; set; }İsimlendirme çakışması ortaya çıktığında önemi artan özel bir alanla desteklenen bir Demo özelliği de vardır. Program.cs'de Tim, bir örnek oluşturup FirstName = "Tim" ve LastName = "Corey" ile başlıyor, ardından soyadı, yaş ve demo değerini yazdırıyor. Her şey beklendiği gibi çıkış yapar: "Corey", 0 (varsayılan tamsayı) ve "test".
Sorun: Otomatik Özellikler Kötü Veriyi Kabul Eder
[1:23 - 2:49] Sorunlar, Tim'in null'i LastName'ye inşaattan sonra atadığı zaman ortaya çıkıyor:
p.LastName = null;p.LastName = null;LastName required olarak işaretlenmiş ve devredilmez bir dizi olarak yazılmış olsa da, atama derlenir. required değiştiricisi, yalnızca nesne başlatma sırasında bir değer sağlanmasını zorunlu kılar; sonrasında birinin özelliği null'ye ayarlamasını önlemez. Sonuç, çalışmada bir hata atılmadan boş bir soyaddır.
Bu, veri bütünlüğünde gerçek bir boşluktur. Tür sistemi, null başvuru kıvranmasıyla sizi uyarır, ancak bu bir derleme zamanı ipucudur, çalışma zamanı koruyucusu değil. Uygulamanızın, LastName her zaman geçerli bir dizi içermesine bağlı olduğu durumlarda, otomatik özellikler yalnız başına o sözleşmeyi sağlayamaz.
Eski Çözüm: Manuel Yedek Alan ile Tam Özellikler
[2:58 - 4:19] C# 14'ten önce, standart çözüm, otomatik özelliği açık bir yedek alan ile tam bir özelliğe dönüştürmekti:
private string _lastName;
public required string LastName
{
get => _lastName;
set => _lastName = value ?? throw new ArgumentNullException(nameof(LastName));
}private string _lastName;
public required string LastName
{
get => _lastName;
set => _lastName = value ?? throw new ArgumentNullException(nameof(LastName));
}Tim bunu çalıştırır ve istisnanın doğru bir şekilde atıldığını onaylar: "Değer null olamaz. Parametre adı: LastName." Yöntem işe yarar, ama özel bir alan tanımlamayı, hem alıcı hem de ayarlayıcıyı bağlamayı ve özellik adını birden fazla satırda tekrarlamayı gerektirir. Tek bir doğrulama kuralı için bu çok fazla ayrıntıdır.
Bu durumda alıcı özel bir şey yapmaz; alanı değiştirilmeden döndürür. Yine de otomatik özellik bölgesinden ayrıldıktan sonra söz dizimi hem getter hem de setter için yazılması zorunlu kılar, bu yüzden açıkça yazmalısınız. Tim, bu söz fazlalığını yeni özelliğin ardındaki motivasyon olarak çerçeveler.
C# 14 Çözümü: Alan Anahtar Kelimesi
[4:23 - 5:47] C# 14, arada bir yol tanıtır. Kendiniz özel bir destek alanı tanımlamak yerine, bir getter veya setter içerisinde field bağlamsal anahtar kelimesini kullanarak derleyici tarafından üretilen destek alanına doğrudan referans verirsiniz:
public required string LastName
{
get;
set => field = value ?? throw new ArgumentNullException(nameof(LastName));
}public required string LastName
{
get;
set => field = value ?? throw new ArgumentNullException(nameof(LastName));
}Getter, bir gövde gerektirmeyen otomatik uygulanmış bir get; olarak kalır. Setter, gelen value'i geçerlendirme sonrasında atamak için field kullanır. Derleyici, standart otomatik bir özellikte yapadığı gibi sahne arkasında yedek alanı oluşturur ve yönetir.
Demoyu çalıştırmak, null atamada aynı ArgumentNullException'yı üretir. Davranış, manuel yedekli sürümle aynıdır, yedi satırdan ihtiyaçı olanı özelleştiren odaklanmış bir bloğa sıkıştırılmıştır. Otomatik özellik getter'ını tutarsınız, yalnızca setter'a mantık ekler ve manuel alan deklarasyonunu tamamen atlayabilirsiniz.
Bu, düz bir otomatik özellik (bir satır, doğrulama yok) ile tam bir özellik (yedi veya daha fazla satır, tam kontrol) arasında kullanışlı bir ara adım sağlar. Mantığınız yalnızca setter'a dokunduğunda, getter'ı yeniden yazmanın sözdizimsel maliyetinden daha fazla ödemeniz gerekmez.
Bir Setter Koruyucu ile Yaşı Doğrulama
[6:16 - 7:39] field'in yalnızca null denetimleriyle sınırlı olmadığını göstermek için Tim, Ageözelliğine aralık doğrulaması ekler:
public int Age
{
get;
set
{
if (value > 0 && value < 120)
field = value;
}
}public int Age
{
get;
set
{
if (value > 0 && value < 120)
field = value;
}
}Burada setter, makul bir aralığın dışındaki değerleri sessizce görmezden gelir. -5 ataması, koşulların başarısız olması ve field asla yazılmaması nedeniyle Age'i varsayılanı olan sıfırda bırakır. Tim, alternatif olarak bir istisna atılabileceğini belirtir, ancak sessiz yaklaşım, setter gövdesinin depolama için yine de field'e güvenirken ihtiyaç duyduğunuz her türlü mantığı içerebileceğini gösterir.
Kalıp geniş çapta uygulanabilir: sayısal aralıkları sıkıştırmak, dizgilerin başındaki veya sonundaki boşlukları kırpmak, büyük küçük harfleri normalize etmek veya her bir özellik ayarında uygulanmasını istediğiniz herhangi bir dönüşüm.
Mevcut Alan Değişkenleriyle İsim Çakışmaları
[7:39 - 9:43] Tim kasıtlı bir uç durum tanıtır. Demodaki sınıf, harfi harfine field adlı bir özel üyeye sahiptir:
private string field = "test";private string field = "test";C# 14 etkin hale geldiğinde derleyici, bir özellik erişicisi içindeki field'i değişken yerine anahtar kelime olarak kabul eder. Bu, bir özelliğin field'a referans vermesinin, "test" içeren dizi üyesi yerine özelliğin ardındaki gizli depolamadan sessizce okuma yapacağı anlamına gelir. Çıktı boş hale gelir, sadece bir uyarı ile derleme hatası olmadan.
İki çözüm vardır. this.field ile öne eklemek, derleyiciye anahtar kelime yerine sınıf seviyesi üyeyi kastettiğinizi belirtir. Alternatif olarak, @field kaçış karakteri aynı şekilde çalışır:
// Both refer to the instance variable, not the keyword
string demo => this.field;
string demo => @field;// Both refer to the instance variable, not the keyword
string demo => this.field;
string demo => @field;Tim'in kuvvetli önerisi, C# 14'e yükseltirken field adlı tüm değişkenleri yeniden adlandırmaktır. IDE'nizde hızlı bir "Tümünü Yeniden Adlandır" işlemi, belirsizliği kalıcı olarak ortadan kaldırır. Çatışma yalnızca özellik erişicileri içinde oluşur; Yapıcılar ve yöntemler, o bağlamlarda örtük bir destek deposu olmadığı için field'yi beklendiği gibi değişken adına çözümler.
Tamamlayıcı: Daha Az Şablon, Aynı Kontrol
[10:04 - 10:28] field anahtar kelimesi, günlük C# kodunda pratik bir boşluğu doldurur. Bir koruyucu koşul veya dönüşüme ihtiyaç duyan özellikler artık manuel yedekleme alanları ile tam bir yeniden yazımı gerektirmez. Yalnızca mantık gerektiren erişiciyi özelleştirirsiniz ve diğerini standart otomatik uygulama olarak bırakırsınız.
Sonuç
[10:28 - 10:35] Özetlemek gerekirse: C# 14'ün field anahtar kelimesi, herhangi bir özelliğin erişici içinde örtük destek deposuna doğrudan erişim sağlar. Özelleştirme gerektirmeyen parçalar için otomatik özellik sözdizimini terk etmeden, setter doğrulaması, getter dönüşümleri veya her ikisini eklemek için kullanın.
Yükseltme öncesinde, kod tabanınızda field adında herhangi bir değişken olup olmadığını arayıp yeniden adlandırın. Bu önlem, bu özelliğin tanıttığı tek gerçek yakalama noktası olanı önler. Bunun ötesinde, çoğu geliştiricinin modellerini zaten nasıl yapılandırdığına doğal olarak oturan şablon azalmasıdır.
Örnek İpucu: Sadece setter'ı doğrulamanız gerekiyorsa, getter'ı gövdesiz standart get; olarak bırakın. Derleyici bunu otomatik özellik getter'ı olarak ele alır ve hiçbir şey eklemeyen bir pas geçiş dönüş ifadesi yazmaktan kaçınırsınız.
Tam videoyu YouTube Kanalında izleyin ve C# dil özellikleri hakkında daha fazla bilgi edinin.

