C# Özelliklerini Anlamak
.NET 7 ile tanıtılan C# 11, özelliklere heyecan verici bir ekleme getirdi: required anahtar kelimesi. Bu makalede, Tim Corey'nin ".NET 7 Güncellemesi: Zorunlu Özellikler 10 Dakika veya Daha Az Sürede" adlı öz video öğreticisinden örnekler kullanarak C# özelliklerini inceleyeceğiz. Özelliklerin temelinden yeni required anahtar kelimesine kadar her şeyi inceleyecek ve bu özelliğin başlangıç kurallarını nasıl zorladığına bakacağız.
C# Özellikleri
C#'da, özellikler, alanları kapsüllemek ve bir nesnenin sınıf veri üyelerine erişimi yönetmenize olanak tanır. Genellikle, veri bütünlüğünü sağlarken harici erişime izin vermek için kullanılırlar. Özel bir alan, verilerin nasıl erişildiği veya nasıl değiştirildiği üzerinde kontrol sağlayarak özellikler kullanılarak kapsüllenebilir. Genellikle Public string özellikler, sınıf üyelerini verimli bir şekilde yönetmek için get ve set adlı özel yöntemler kullanır. C#'da bir statik özelliğe, sınıf üçlendiğinde erişilemez, sadece bu sınıf bir örnek oluşturulmadan erişilebilir; böylece mülk değerlerini yönetmenin benzersiz bir yolunu sunar.
Tim, basit bir özellik örneği kurarak nasıl çalıştığını gösteriyor.
Bir Konsol Uygulaması Oluşturma
Önce, Tim, C# 11 kullanan temel bir .NET 7 konsol uygulamasıyla başlar. Bu sürüm, önceki .NET sürümlerinde mevcut olmayan required anahtar kelimesini tanıtır.
Basit Bir Model Tanımlama
Tim PersonModel sınıfını FirstName ve LastName için özelliklerle 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'ye ilk ve soyadları depolama imkanı verir. Ancak, ek ayarlamalar olmadan, FirstName ve LastName potansiyel olarak başlatılmadan bırakılabilir ve null değerlere yol açabilir.
Başlangıcı Sağlamak İçin Yapıcıları Kullanma
Özelliklerin her zaman başlatıldığından emin olmak için yaygın bir yöntem, yapıcıyı kullanmaktır. Tim'in örneğinde, PersonModel temel sınıfına 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, 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şaretler.
Nullable Bağlam
.NET 6 ve C# 10 ile başlayan C#, null yapılabilir referans türlerini tanıttı. Bu, özelliklerin ya başlatılması ya da ? kullanılarak explicit olarak null yapılabilir olarak işaretlenmesi gerektiği anlamına gelir. Örneğin, FirstName ve LastName null olabilir ise, 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, biz FirstName ve LastName her zaman null olmayan olması gerektiğini varsayıyoruz. Başlangıçta, nullability dikkatli başlatma veya nullable açıklamalarla ele alınıyordu, ancak C# 11 ile daha güçlü seçeneklere sahibiz.
required Anahtar Sözcüğünü Tanıtma
Yapıcılara başlatmayı zorlayabilirken, C# 11 required anahtar kelimesini tanıtır, belirli özelliklerin ayarlanmasını sağlamak daha kolay hale gelir. required ile, bireysel özellikleri zorunlu olarak işaretleyebilirsiniz, bu da nesne başlatılması sırasında bir değer atanması gerektiği anlamına gelir.
required Özellikleri Ayarlama
FirstName ve LastName'yı 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 şimdi onların ya bir nesne başlatıcı ya da bir yapıcı yoluyla ayarlanmasını zorlar. Bu faydalıdır çünkü özel özellikleri zorunlu kılarken yapıcı oluşturmanız gerekmez.
required Özellikleri ile Örnek Kullanım
Şimdi PersonModel'yi şu şekilde oluşturup başlatabiliriz:
PersonModel person = new() { FirstName = "Tim", LastName = "Corey" };PersonModel person = new() { FirstName = "Tim", LastName = "Corey" };FirstName veya LastName'yi atladığımızda, derleyici bir hata işaretleyerek bizi bu zorunlu özellikleri başlatmamız konusunda uyarır.
required ile Yapıcıları Kullanma
Tim, hem required özellikleri hem de yapıcıların kullanıldığı bir durumu gösteriyor. Yapıcı, required özellikleri ayarladığında, C# o özelliklerin yapıcı çağrıldığında hâlâ başlatıldığına emin olmalıdır.
Böyle durumlarda, yapıcının gerekli koşulları karşıladığını belirtmek için SetsRequiredMembers özniteliği kullanılabilir. Tim bunu şöyle uygular:
[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 ekleyerek, derleyiciye bu özelliklerin yapıcı içerisinde ayarlanacağı ve başlatma hatalarının önleneceği bildirilir. Bu özellik, özelliklerin nasıl başlatıldığına esneklik sağlar ve tesadüfi ihmal edilmelere karşı önlem alır.
required Özelliklerin Neden Faydalı Olduğu
Tim, yeni required anahtar kelimesinin özelliklerin her zaman ayarlanmasını sağlama sürecini nasıl kolaylaştırdığını açıklar. Artık, her durumda set method için yapıcılara ihtiyaç duyma veya ayarlanmamış özellikler riskine girmeyi gerektirme yerine, özellik bildiriminde doğrudan belirli değerleri gerektirmek için bunun basit bir yolu var.
Bu özellik, özellikle belirli alanların zorunlu olduğu veri modellerinde parıldıyor ve çalışma zamanı null hatalarını önleyerek geliştirme sürecinde erken sorunları yakalamaya yardımcı olabilir.
Ek Özellikler Örneği
Tim daha sonra nullable olabilecek bir opsiyonel özellik, Email ekledi:
public string? Email { get; set; }public string? Email { get; set; }required ile işaretlenmediği için, Email özelliği derleyici hatası oluşturmaksızın ayarlanmamış kalabilir. Bu örnekle, Tim'in temel ve isteğe bağlı veri alanları arasındaki net ayrımı olan bir sınıf için sağladığı esnekliği gösterdi.
Sonuç
C# 11'deki required özelliklerin eklenmesi, geliştiriciler için değerli bir özellik olup, temel özelliklerin her zaman başlatılması gerektiğini sağlıyor. Tim Corey'nin videosu bu özelliğin mükemmel bir girişini yapıyor ve bir konsol uygulaması içinde nasıl çalıştığını gösteriyor. required anahtar kelimesini nesne başlatıcılar ve yapıcılarla birleştirerek, C#'ta daha sağlam ve daha güvenli veri modelleri oluşturabiliriz. Daha fazla bilgilendirici eğitim için Tim'in YouTube Kanalına göz atın.

