C# Init Anahtar Sözcüğü (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 özelliklerini tanımlamanın yeni bir yolunu tanıttı. C#'ın önceki sürümlerinde, genellikle nesne alanlarından okumak ve yazmak için get ve set erişimcileri ile özellikler kullanılırdı. Ancak, init ile, yazılabilir özellikleri yalnızca nesne başlatılması sırasında yapabilir, sonrasında okunamaz hale getirebilirsiniz.
Bu öğretici, C# init anahtar kelimesini kullanarak pratik örnekler ve senaryolar inceleyecek ve IronPDF kütüphanesi kullanacaktır. Ayrıca geleneksel özellik kurucuları (set) ile yeni init-yalnızca kurucuları arasındaki kritik farkları öğreneceksiniz.
Init Anahtar Kelimesine Temel Örnek
Basit 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 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 init-yalnızca özellikler olarak işaretlenmiştir. Bu, sadece nesne başlatılması sırasında atanabilecekleri anlamına gelir. Nesne oluşturulduktan sonra, değerleri değiştirmeye çalışmak derleme zamanı hatasına neden olur.
Neden Init Anahtar Kelimesi Kullanmalı?
Init anahtar kelimesini kullanmanın ana nedeni, nesne özelliklerini başlatılmadan sonra değişmez hale getirmektir. Geleneksel olarak, özellikleri okunabilir olarak işaretleyerek değişmezlik elde edebilirdiniz. Ancak, genellikle alanları ayarlamak için gerekli tüm değerleri kabul eden bir kurucuya ihtiyaç duyardınız, bu da kurucu şablon koduna yol açabilir. Init ile uzun kurucular yazmadan nesne başlatıcılarını 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 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şlatılması
Init kullanımı, nesne başlatıcılarıyla sorunsuz çalışır. Değerleri ayarlamak için kuruculara güvenmek yerine, bir nesne oluştururken ihtiyaç duyduğunuz ö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 error
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 error
Public 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 error
Bu, Point turunde basit ve değiştirilemez bir nesne oluşturur. X ve Y degerlerinin başlangicta ayarlandigina ve sonrada değiştirilemeyecegine dikkat edin.
Init ve Kurucuları Birleştirme
Init'in birincil kullanım durumu nesne başlatıcıları üzerinden nesne başlatılması olsa da, gerekirse bir kurucu da kullanabilirsiniz. Bu, nesne oluşturma sırasında belirli özellik değerlerini dayatırken ö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 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 Class
Hem kurucuları hem de init özelliklerini birlikte kullanabilirsiniz. Bu yaklaşım, nesne yapımından sonra değişmezliği dayatırken daha fazla esneklik sunar.
Init'in Özel Kurucu Üzerine Avantajları
Önceden, geliştiriciler özel bir set erişimcisi kullanarak sınıf dışındaki özellk değişimini sınırlardı.
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
{
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 Class
Bu yaklaşım çalışsa da, özellikleri başlatmak için kurucu şablon kodu gerektirir. Ayrıca, sınıfın kendisinin daha sonra özellikleri değiştirmesine izin verir, bu da her zaman değişmez nesneler için ideal değildir. Init anahtar kelimesi bu sorunu ortadan kaldırır çünkü sadece nesne oluşturma sırasında başlatılmaya izin verir ve sonrasında herhangi bir değişikliği engeller.
Okuma-Zamanı Alanlar ve Init Erişimcileri ile Başlatmayı Yönetme
Init anahtar kelimesi, nesne oluşturulurken alanları veya özellikleri başlatabilirken, bunlar sonrasında değişmez kalır. Okuma-zamanı alanları değişmezliği sağlarken, init erişimcisi özellikler için benzer bir yetenek sağlar. İşte iki şekilde değişmezliği nasıl yönetebileceğiniz: okuma-zamanı alanlar ve init özellikleri kullanarak.
Okuma-Zamanı Alanları Kurucu İle Kullanma
Bu örnekte, nesne oluşturma sirasinda ayarlanan firstName ve lastName icin yalnizca okunabilir alanlar kullaniriz. Bu alanlar yalnızca kurucuda 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
{
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 Class
Başlatma İçin Init Erişimcilerini Kullanma
Alternatif olarak, okuma-zamanı alanlara gerek kalmadan nesne oluşturulurken başlatılabilecek ancak sonradan değiştirilemeyecek okuma-zamanı özellikleri oluşturmak için init erişimcisini kullanabiliriz. Bu, daha modern bir söz dizimi sunar:
public class Person
{
public string FirstName { get; init; }
public string LastName { get; init; }
}
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 Class
IronPDF'ye Giriş

IronPDF, C# geliştiricileri için tasarlanmış güçlü bir PDF oluşturma ve yönetme kütüphanesidir. HTML'yi dönüştürerek, CSS, resimler ve diğer içerikleri PDF belgelerine dönüştürerek PDF'lerle çalışmayı basitleştirir. Piksel mükemmel oluşturma, platformlar arası destek ve .NET projelerine kolay entegrasyon gibi özelliklerle, IronPDF, hızla yüksek kalitede PDF'ler oluşturması gereken geliştiriciler için idealdir. .NET Core, Framework ve Standard ile kullanabilir ve Windows, Linux ve macOS dahil olmak üzere geniş bir platform yelpazesi destekler.
Durum: C# Init Anahtar Kelimesi ile IronPDF Kullanma
C# projesinde değişmez nesneler oluşturmak ve PDF'ler üretmek için init anahtar kelimesini IronPDF ile birleştirebilirsiniz. Init anahtar kelimesi nesnenin başlatıldıktan sonraki bütünlüğünü sağlarken, IronPDF verileri işler ve bu değişmez modele dayalı PDF'ler üretir.
Projenizde IronPDF'nin doğru bir şekilde referans alındığından emin olun. NuGet aracılığıyla kurabilirsiniz:
Install-Package IronPdf
İş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);
}
}
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 Class
Sonuç

Özetle, C# init anahtar kelimesi, nesne başlatımı sırasında esneklik sunarken değiştirilemez nesneler oluşturmanıza olanak tanır. Bu, constructor şablon kodu ihtiyaçını azaltarak özel kapatıcı erişim belirleyicilerine daha temiz ve güvenli bir alternatif sunar. Init anahtar kelimesi ile salt okunur alanları, yapılarını ve doğrulama mantığını birleştirmek, değiştirilemezliği koruyarak okunabilirliği veya esnekliği feda etmeden sağlam ve güvenli veri yapıları oluşturmanıza yardımcı olur. IronPDF ücretsiz deneme sunar ve lisanslar $799 başlar. Bu, düzenleme, sıkıştırma ve PDF'leri güvence altına alma gibi tüm özelliklerine erişim sağlar.
Sıkça Sorulan Sorular
HTML'yi C#'de PDF'ye nasıl dönüştürebilirim?
HTML dizgilerini PDF'lere dönüştürmek için IronPDF'nin RenderHtmlAsPdf yöntemini kullanabilirsiniz. Ayrıca RenderHtmlFileAsPdf kullanarak HTML dosyalarının PDF'lere dönüştürülmesini de sağlayabilirsiniz.
C# dilinde init anahtar sözcüğünün amacı nedir?
Init anahtar sözcüğü, sadece nesne başlatılırken ayarlanabilen, sonrasında değişmezlik sağlayan özellikler tanımlamanıza olanak tanır. Bu özellik, bir kez oluşturulduktan sonra değişmemesi gereken nesneler oluşturmak için özellikle kullanışlıdır.
C# dilinde init anahtar sözcüğü nesne değişmezliğini nasıl artırır?
Init anahtar sözcüğü, özelliklerin yalnızca nesnenin başlatma aşamasında ayarlanmasına izin vererek, sonrasında herhangi bir değişikliğin yapılmasını engeller. Bu, nesnelerin oluşturulduktan sonra değişmez kalmasını garanti eder.
Init özellikleri, PDF üretimi için kütüphaneler ile kullanılabilir mi?
Evet, init özellikleri, PDF üretimi süresince kullanılan verilerin tutarlılığını sağlamak için IronPDF gibi kütüphanelerle kullanılabilir.
Init anahtar sözcüğünü geleneksel ayarlayıcılara tercih etmenin avantajları nelerdir?
Init anahtar sözcüğünü geleneksel ayarlayıcılara tercih etmek, değişmezliğe teşvik eder, uzun yapıcı kod ihtiyaçını azaltır ve nesne özelliklerinin başlatmadan sonra değiştirilemez olmasını sağlar.
C# dilinde değişmez özelliklerle PDF üretimi nasıl entegre edebilirim?
Init özelliklerini kullanarak değişmez nesneler oluşturabilir ve bu nesneleri IronPDF'e iletebilirsiniz; bu, verileri kullanarak tutarlı ve güvenilir PDF belgeleri oluşturabilir.
Init anahtar sözcüğü modern C# uygulamaları oluşturmakta hangi rolü oynar?
Init anahtar sözcüğü, modern C# uygulamaları oluştururken geliştiricilere özlü bir sözdizimi ile değişmez nesneler tanımlama olanağı vererek, kod güvenliğini artırır ve hataları azaltır.
C# projesine PDF üretimi için bir kütüphane nasıl kurabilirim?
IronPDF gibi bir kütüphaneyi C# projenize, NuGet Paket Yöneticisi'ni kullanarak Install-Package IronPdf komutuyla kurabilirsiniz.
Uygulama geliştirmede değişmezlik neden önemlidir?
Değişmezlik, veri bütünlüğünü ve tutarlılığını sağlayarak, uygulamanızı daha bakımı kolay hale getirir ve hataların olasılığını azaltır.
Init anahtar sözcüğünün kullanımını gösteren pratik örnekler nelerdir?
Pratik bir örnek, init anahtar sözcüğünü kullanarak sadece başlatma sırasında ayarlanabilen özelliklere sahip bir sınıf tanımlamaktır; bu, oluşturulan nesnenin değişmeden kalmasını sağlar. Bu, veri uyumluluğunun kritik olduğu senaryolarda özellikle kullanışlıdır.




