C# Özelliklerini Anlamak
C# 11, .NET 7 ile birlikte özelliklere heyecan verici bir ekleme getirdi: required anahtar kelimesi. Bu makalede, Tim Corey'nin '.NET 7 Güncellemesi: Gerekli Özellikler 10 Dakikada veya Daha Kısa Sürede' başlıklı kısa video eğitiminden örnekler kullanarak C# özelliklerini inceleyeceğiz. Temel özelliklerden yeni required anahtar kelimesine ve nasıl başlatma kurallarını zorladığına kadar her şeyi inceleyeceğiz.
C# Özellikleri
C#'ta, özellikler, bir nesnenin sınıf veri üyelerine erişimi kapsüllemek ve yönetmek için kullanılır. Genellikle, veri bütünlüğünü sağlarken dış erişime izin vermek için kullanılırlar. Özellikler kullanılarak özel bir alan kapsüllenebilir, verilerin nasıl erişileceği veya değiştirileceği üzerinde kontrol sağlar. Genel string özellikleri, sınıf üyelerini verimli bir şekilde manipüle etmek için genellikle erişimciler (get ve set) adı verilen özel yöntemleri kullanır. C#'ta bir statik özellik, sınıfı oluşturmak gerekmeden erişilebilir ve bu da özellik değerlerini yönetmek için benzersiz bir yol sunar.
Tim'in basit bir özelliği açıklamak için nasıl kurduğuna dair bir örnek burada.
Bir Konsol Uygulaması Oluşturma
Önce Tim, C# 11 kullanarak temel bir .NET 7 konsol uygulamasıyla başlar. Bu sürüm, .NET'in önceki sürümlerinde bulunmayan required anahtar kelimesini sunar.
Basit Bir Model Tanımlama
Tim, PersonModel sınıfında FirstName ve LastName için özellikler oluşturur:
public class PersonModel
{
public string FirstName { get; set; }
public string LastName { get; set; }
}public class PersonModel
{
public string FirstName { get; set; }
public string LastName { get; set; }
}Bu özellikler PersonModel'nin isim ve soyisim saklamasına olanak tanır. Ancak, ek bir ayar olmadan, FirstName ve LastName başlangıçta tanımsız bırakılabilir, bu da null değerlere neden olur.
Başlatmayı Sağlamak İçin Yapıcıları Kullanma
Özelliklerin her zaman başlatıldığından emin olmanın yaygın bir yolu yapıcılar kullanmaktır. Tim'in örneğinde, ana sınıfa PersonModel için hem FirstName hem de LastName gerektiren bir yapıcı ekler:
public PersonModel(string firstName, string lastName)
{
FirstName = firstName;
LastName = lastName;
}public PersonModel(string firstName, string lastName)
{
FirstName = firstName;
LastName = lastName;
}Bu yaklaşım, her zaman bir PersonModel nesnesi oluşturulduğunda hem FirstName hem de LastName sağlanmasını zorunlu kılar. Eğer bu değerleri belirtmeden bir PersonModel oluşturmaya çalışırsak, derleyici bunu hata olarak işaretleyecektir.
Nullable Bağlam
.NET 6 ve C# 10 ile başlayarak, C# nullable referans türlerini tanıttı. Bu, özelliklerin ya başlatılmış olması ya da ? kullanılarak açıkça null olabilecek şekilde işaretlenmesi gerektiği anlamına gelir. Örneğin, eğer FirstName ve LastName null olabilirlerse, onları şu şekilde tanımlarız:
public string? FirstName { get; set; }
public string? LastName { get; set; }public string? FirstName { get; set; }
public string? LastName { get; set; }Ancak Tim'in örneğinde, FirstName ve LastName'nin her zaman null olmadığını varsayıyoruz. Başlangıçta, null olabilirlik dikkatli başlatma veya nullable açıklamalarla ele alındı, ancak C# 11 ile daha sağlam seçeneklerimiz var.
Required Anahtar Kelimesini Tanıtma
Yapıcılar başlatmayı zorunlu kılabilirken, C# 11 özelliğin ayarlanmasını kolaylaştıran required anahtar kelimesini tanıtıyor. required ile belirli özellikleri zorunlu olarak işaretleyebilirsiniz, bu da nesne başlatma sırasında onlara bir değer atanması gerektiği anlamına gelir.
Required Özelliklerini Ayarlama
FirstName ve LastName'yi zorunlu özellikler yapmak için, Tim 4:15'te PersonModel sınıfını şu şekilde değiştirir:
public class PersonModel
{
public required string FirstName { get; set; }
public required string LastName { get; set; }
}public class PersonModel
{
public required string FirstName { get; set; }
public required string LastName { get; set; }
}Bu özellikleri required ile işaretleyerek, derleyici artık onların ya bir nesne başlatıcı veya bir yapıcı ile ayarlanmasını zorunlu kılar. Bu, belirli özelliklerin gerekli olmasını sağlarken bir yapıcı oluşturmaya gerek kalmadan yapmanıza olanak tanır.
Gerekli Özelliklerle Örnek Kullanım
Şimdi, PersonModel'yi aşağıdaki gibi oluşturabilir ve başlatabiliriz:
PersonModel person = new() { FirstName = "Tim", LastName = "Corey" };PersonModel person = new() { FirstName = "Tim", LastName = "Corey" };FirstName veya LastName'yi ihmal edersek, derleyici bir hata işaretler, bu da bizi bu zorunlu özellikleri başlatmaya yönlendirir.
Yapıcılarla birlikte required Kullanma
Tim, hem required özelliklerinin hem de yapıcıların kullanıldığı bir durumu gösterir. Gerekli özellikleri ayarlayan bir yapıcınız olduğunda, C# bu özelliklerin yapıcı çağrıldığında hala başlatıldığından emin olmalıdır.
Bu tür durumlarda, yapıcının gerekli koşulları karşıladığını belirtmek için SetsRequiredMembers özniteliği kullanılabilir. Tim'in bunu nasıl uyguladığını gösteren bir örnek burada:
[SetsRequiredMembers]
public PersonModel()
{
FirstName = "Test";
LastName = "Test";
}
[SetsRequiredMembers]
public PersonModel(string firstName, string lastName)
{
FirstName = firstName;
LastName = lastName;
}[SetsRequiredMembers]
public PersonModel()
{
FirstName = "Test";
LastName = "Test";
}
[SetsRequiredMembers]
public PersonModel(string firstName, string lastName)
{
FirstName = firstName;
LastName = lastName;
}SetsRequiredMembers eklemek, bu özelliklerin yapıcı içerisinde ayarlanacağını derleyiciye bildirir, başlatma hatalarını önler. Bu özellik, yanlışlıkla atlamaları önlemeye yardımcı olurken özelliklerin nasıl başlatılabileceğine esnekliği sağlar.
Required Özelliklerinin Neden Kullanışlı Olduğu
Tim, özelliklerin her zaman ayarlanmasını sağlamanın sürecini kolaylaştıran yeni required anahtar kelimesini açıklar. Her durumda set metodu için yapıcılara ihtiyaç duymak veya ayarlanmamış özellikler riski almak yerine, artık özellik beyannamesinde doğrudan belirli değerleri zorunlu hale getirmek için yalın bir yolumuz var.
Bu özellik, belli alanların zorunlu olduğu veri modellerinde parlıyor ve çalışma zamanı null hatalarını önleyerek geliştirme sürecinde sorunları erken yakalayabilir.
Ek Özellikler Örneği
Sonrasında, nullable olabilen isteğe bağlı bir özellik olan Email ekler:
public string? Email { get; set; }public string? Email { get; set; }required ile işaretlenmediğinden, Email özelliği başlatılmadan kalabilir ve derleyici hatasına neden olmaz. Bu örnekle birlikte, Tim sınıf için gerekli ve isteğe bağlı veri alanlarını arasındaki kesin ayrımı sağlayan esnekliği gösterdi.
Sonuç
C# 11'deki required özelliklerinin eklenmesi, geliştiriciler için önemli bir özelliktir, temel özelliklerin her zaman başlatıldığından emin olur. Tim Corey'nin videosu, bu özelliğe mükemmel bir giriş sağlar ve bir konsol uygulaması içinde nasıl çalıştığını gösterir. required anahtar kelimesini nesne başlatıcıları ve yapıcılarla birleştirerek C# içinde daha sağlam ve güvenli veri modelleri oluşturabiliriz. Daha fazla öğretici için lütfen Tim'in YouTube Kanalını ziyaret edin.

