
C# init Anahtar Kelimesi (Geliştiriciler İçin Nasıl Çalışır)
C# 9.0'daki init anahtar kelimesi, değişmez nesneler oluşturmak için sınıf özellikleri tanımlamanın yeni bir yolunu sundu. C#'ın önceki sürümlerinde, özellikler genellikle nesne alanlarını okumak ve yazmak için get ve set alıcıları ile kullanılırdı. Ancak, init ile, nesne başlatılması sırasında yazılabilir özellikler yapabilir ve sonrasında yalnızca okunur hale getirebilirsiniz.
Bu ders, C# init anahtar kelimesini pratik örnekler ve IronPDF kütüphanesi ile senaryolarla kullanmayı keşfedecek. Ayrıca geleneksel özellik ayarları (set) ile yeni init-only ayarları arasındaki temel farkları da öğreneceksiniz.
Init Keyword Temel Örneği
Temel bir örnekle başlayalım:
public class Person
{
public string FirstName { get; init; }
public string LastName { get; init; }
}
var person = new Person
{
FirstName = "Iron",
LastName = "Dev"
};
// person.FirstName = "Jane"; // This will give a compile-time error.Public Class Person
Public Property FirstName() As String
Public Property LastName() As String
End Class
Private person = New Person With {
.FirstName = "Iron",
.LastName = "Dev"
}
' person.FirstName = "Jane"; // This will give a compile-time error.
Bu örnekte, FirstName ve LastName sadece başlatma özelliği olarak işaretlenmiştir. Bu, nesne başlatılması sırasında yalnızca atanabilecekleri anlamına gelir. Nesne oluşturulduktan sonra değerleri değiştirme girişimi derleme zamanı hatasına neden olur.
Init Anahtar Kelimesini Niçin Kullanmalısınız?
Init anahtar kelimesini kullanmanın ana nedeni, nesne özelliklerini başlatma sonrasında değiştirilemez hale getirmektir. Gelenekselex olarak, özellikleri değiştirilemezlik için yalnızca okunabilir olarak işaretleyerek değişmezlik elde ederdiniz. Ancak, genellikle tüm gerekli değerleri alanlara ayarlamak için bir yapıcıya ihtiyaç duyardınız, bu da yapıcı hazırlık kodlarına neden olabilir. Init ile, uzun yapıcılar yazmadan, nesne başlatıcıları kullanarak aynı hedefe ulaşabilirsiniz.
public class Person
{
public string FirstName { get; init; }
public string LastName { get; init; }
// Without using constructor boilerplate for property initialization
}
var person = new Person
{
FirstName = "John",
LastName = "Doe"
};Public Class Person
Public Property FirstName() As String
Public Property LastName() As String
' Without using constructor boilerplate for property initialization
End Class
Private person = New Person With {
.FirstName = "John",
.LastName = "Doe"
}Init Yalnızca Özelliklerle Nesne Başlatma
Init, nesne başlatıcılarıyla sorunsuz bir şekilde çalışır. Değerleri ayarlamak için yapıcılara güvenmek yerine, bir nesne oluştururken ihtiyacınız olan özellikleri doğrudan tanımlayabilirsiniz.
public class Point
{
public int X { get; init; }
public int Y { get; init; }
}
var point = new Point { X = 10, Y = 20 };
// point.X = 30; // This will throw a compile-time errorPublic Class Point
Public Property X() As Integer
Public Property Y() As Integer
End Class
Private point = New Point With {
.X = 10,
.Y = 20
}
' point.X = 30; // This will throw a compile-time errorBu, Point türünde basit, değişmez bir nesne oluşturur. X ve Y değerlerinin başlatma sırasında ayarlandığına ve daha sonra değiştirilemeyeceğine dikkat edin.
Init ile Yapıcılara Karıştırmak
Init için ana kullanım durumu nesne başlatma yoluyla nesne başlatıcıları olsa da, gerekirse bir yapıcı da kullanabilirsiniz. Bu, nesne oluşturma sırasında belirli özellik değerlerini zorlamak istediğinizde özellikle yararlıdır.
public class Person
{
public string FirstName { get; init; }
public string LastName { get; init; }
public Person(string firstName, string lastName)
{
FirstName = firstName;
LastName = lastName;
}
}Public Class Person
Public Property FirstName() As String
Public Property LastName() As String
Public Sub New(ByVal firstName As String, ByVal lastName As String)
Me.FirstName = firstName
Me.LastName = lastName
End Sub
End ClassHem yapıcıları hem de init özelliklerini birlikte kullanabilirsiniz. Bu yaklaşım, nesne yapımından sonra değişmezliği zorlamaya devam ederken daha fazla esneklik sunar.
Özel Set Üzerine Init Faydaları
Önceden, geliştiriciler sınıf dışındaki mülk değişikliklerini sınırlamak için özel bir set alıcısı kullanırdı.
public class Person
{
public string FirstName { get; private set; }
public string LastName { get; private set; }
public Person(string firstName, string lastName)
{
FirstName = firstName;
LastName = lastName;
}
}Public Class Person
Private privateFirstName As String
Public Property FirstName() As String
Get
Return privateFirstName
End Get
Private Set(ByVal value As String)
privateFirstName = value
End Set
End Property
Private privateLastName As String
Public Property LastName() As String
Get
Return privateLastName
End Get
Private Set(ByVal value As String)
privateLastName = value
End Set
End Property
Public Sub New(ByVal firstName As String, ByVal lastName As String)
Me.FirstName = firstName
Me.LastName = lastName
End Sub
End ClassBu yaklaşım çalışsa da, özellikleri başlatmak için yapıcı hazırlık kodlarını gerektirir. Ayrıca, sınıfın kendisinin mülkleri daha sonra değiştirmesine izin verir, bu da değişmez nesneler için her zaman ideal değildir. Init anahtar kelimesi, bu sorunu ortadan kaldırır, çünkü yalnızca nesne oluşturma zamanında başlatmaya izin verir ve sonrasında herhangi bir değişikliği engeller.
Yalnızca Okunabilir Alanlarla ve Init Erişimcileriyle Başlatma Çalıştırması
Init anahtar kelimesi, alanları veya özellikleri nesne oluşturma sırasında başlatarak, sonrasında değiştirilemez kalırken başlatılmasını sağlayabilir. Değiştirilemezlik sağlamak için yalnızca okunabilir alanlar sağlarken, init alıcısı özellikler için benzer bir yetenek sunar. İki şekilde değişmezliği nasıl yönlendireceğiniz burada: yalnızca okunabilir alanlar ve init özellikleri kullanarak.
Bir Yapıcı ile Yalnızca Okunabilir Alanları Kullanma
Bu örnekte, nesne yaratımı sırasında ayarlanan firstName ve lastName için yalnızca okuma alanlarını kullanıyoruz. Bu alanlar yapıcıda yalnızca bir kez atanabilir ve sonrasında değiştirilemez:
public class Person
{
private readonly string firstName;
private readonly string lastName;
public string FirstName => firstName;
public string LastName => lastName;
public Person(string firstName, string lastName)
{
this.firstName = firstName;
this.lastName = lastName;
}
}Public Class Person
'INSTANT VB NOTE: The field firstName was renamed since Visual Basic does not allow fields to have the same name as other class members:
Private ReadOnly firstName_Conflict As String
'INSTANT VB NOTE: The field lastName was renamed since Visual Basic does not allow fields to have the same name as other class members:
Private ReadOnly lastName_Conflict As String
Public ReadOnly Property FirstName() As String
Get
Return firstName_Conflict
End Get
End Property
Public ReadOnly Property LastName() As String
Get
Return lastName_Conflict
End Get
End Property
Public Sub New(ByVal firstName As String, ByVal lastName As String)
Me.firstName_Conflict = firstName
Me.lastName_Conflict = lastName
End Sub
End ClassBaşlatma için Init Erişimcileri Kullanma
Alternatif olarak, oluşturma sırasında başlatılabilen ancak daha sonra değiştirilemeyen yalnızca okunabilir özellikler oluşturmak için init alıcısını kullanabiliriz. Bu, yalnızca okunabilir alanlar ihtiyacını ortadan kaldırır ve daha modern bir sözdizimi sağlar:
public class Person
{
public string FirstName { get; init; }
public string LastName { get; init; }
}Public Class Person
Public Property FirstName() As String
Public Property LastName() As String
End ClassIronPDF'ye Giriş

IronPDF, C# geliştiricileri için tasarlanmış güçlü bir PDF oluşturma ve manipülasyon kütüphanesidir. HTML, CSS, görüntüler ve diğer içerikleri PDF belgelerine dönüştürerek PDF'lerle çalışmayı basitleştirir. IronPDF, piksel mükemmel işleme, çok platformlu destek ve .NET projelerine kolay entegrasyon gibi özellikleri sayesinde, hızlı bir şekilde yüksek kaliteli PDF'ler oluşturması gereken geliştiriciler için idealdir. .NET Core, Framework ve Standard ile kullanılabilir ve Windows, Linux ve macOS gibi bir çok platformu destekler.
Durum: IronPDF'i C# Init Anahtar Kelimesi ile Kullanma
C# projesinde değişmez nesneler oluşturmak ve aynı zamanda PDF üretmek için, init anahtar kelimesini IronPDF ile birleştirebilirsiniz. Init anahtar kelimesi nesnenin başlatıldıktan sonraki bütünlüğünü sağlar, IronPDF ise veriyi işleyip o değişmez model üzerinden PDF üretir.
IronPDF'in projenizde doğru şekilde referans alındığından emin olun. Bunu NuGet üzerinden yükleyebilirsiniz:
İşte kod örneği:
using IronPdf;
public class Person
{
public int Id { get; init; }
public string FirstName { get; init; }
public string LastName { get; init; }
}
public class PDFGenerator
{
public static void CreatePersonPDF(Person person)
{
var htmlContent = $@"
<html>
<body>
<h1>Person Information</h1>
<p>ID: {person.Id}</p>
<p>First Name: {person.FirstName}</p>
<p>Last Name: {person.LastName}</p>
</body>
</html>";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs($"Person_{person.Id}.pdf");
}
}
class Program
{
static void Main(string[] args)
{
var person = new Person
{
Id = 1,
FirstName = "Iron",
LastName = "Dev"
};
PDFGenerator.CreatePersonPDF(person);
}
}Imports IronPdf
Public Class Person
Public Property Id() As Integer
Public Property FirstName() As String
Public Property LastName() As String
End Class
Public Class PDFGenerator
Public Shared Sub CreatePersonPDF(ByVal person As Person)
Dim htmlContent = $"
<html>
<body>
<h1>Person Information</h1>
<p>ID: {person.Id}</p>
<p>First Name: {person.FirstName}</p>
<p>Last Name: {person.LastName}</p>
</body>
</html>"
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
pdf.SaveAs($"Person_{person.Id}.pdf")
End Sub
End Class
Friend Class Program
Shared Sub Main(ByVal args() As String)
Dim person As New Person With {
.Id = 1,
.FirstName = "Iron",
.LastName = "Dev"
}
PDFGenerator.CreatePersonPDF(person)
End Sub
End ClassSonuç

Özetlemek gerekirse, C# init anahtar kelimesi, nesne başlatma sırasında esneklik sunarak değişmez nesneler oluşturmanızı sağlar. Özel set alıcılarının daha temiz ve daha güvenli bir alternatifi olup, yapıcı hazırlık kodlarına olan ihtiyacı azaltır. Init anahtar kelimesini yalnızca okunabilir alanlar, yapılar ve doğrulama mantığı ile birleştirerek, okunabilirlikten veya esnekliği feda etmeden değişmezliği koruyan sağlam ve güvenli veri yapıları oluşturabilirsiniz. IronPDF, bir ücretsiz deneme sunar ve lisanslar $999 başlangıçtan itibaren. Bu, PDF'leri düzenleme, sıkıştırma ve güvence altına alma gibi tüm özelliklere erişim sağlar.

Jacob Mellor, Iron Software'de Baş Teknoloji Yöneticisidir ve C# PDF teknolojisinde öncü bir mühendisdir. Iron Software'ın ana kod tabanının ilk geliştiricisi olarak, CEO Cameron Rimington ile birlikte şirketin ürün mimarisini 50'den fazla kişilik bir şirkete dönüştürmüştür ve NASA, Tesla ve dünya genelindeki devlet kurumlarına hizmet etmektedir.
İlgili Makaleler


