C# init & required Keywords

Aykut TAŞDELEN
2 min readAug 1, 2024

--

public class Urun
{
public required string Marka { get; init; } // init + set birlikte olamaz!
public string? Aciklama { get; init; }
public int Fiyat { get; set; }
}

required: Nesne yaratılırken object initializer içerisinde söz konusu property’nin zorunlu olarak set edilmesi gerektiğini belirtir. Öte yandan bu mekanizma sadece derleme zamanında çalışmaktadır. Runtime’da yaratılan nesneler için işlevsizdir. (C# 11)

init: set etme işleminin sadece nesne yaratılırken olabileceğini sonradan set işleminin yapılamayacağını belirtir. (C# 9)

Bu durumda:

Urun u1 = new() { Marka="JBC", Aciklama="İndüktif Havya" }; // OK

Urun u2 = new() { Marka = "Uni-T" }; // OK

//Urun u3 = new() { Aciklama = "Osiloksop" }; // hata marka zorunlu!

//Urun u4 = new(); // hata marka zorunlu!

Urun u5 = new() { Marka = "Solomon", Aciklama = "Havya", Fiyat = 4500 }; // OK

u5.Fiyat = 5000; // set olduğu için hem baştan hem sonradan set edilebilir

//u5.Aciklama = "Rezistif havya"; // init olduğu için sadece initializer'da set edilebilir sonradan set edilemez

Ayrıca söz konusu sınıfa requried olan bir property’e kendi içerisinde değer atayacak bir constructor yazılsa bile bu constructor’ın kullanımı derleme hatasına neden olur. Zira required olan property’ler sadece object initializer içerisinde kullanılabilir. Örneğin;

public class Urun
{
public required string Marka { get; init; } // init + set birlikte olamaz!
public string? Aciklama { get; init; }
public int Fiyat { get; set; }

public Urun(string marka, string aciklama)
{
this.Marka = marka;
this.Aciklama = aciklama;
}
}

Urun u6 = new("techtronics", "dso"); // Hata!!!

Aykut TAŞDELEN Quantum Akademi (Kurucu & Eğitmen)
www.quantumakademi.com | info@quantumakademi.com
https://www.linkedin.com/in/aykuttasdelen/
https://www.youtube.com/channel/UCnwiTexPFiAy6b49d14e8dg
https://www.instagram.com/quantum_akademi/

--

--