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 ö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 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 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 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 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 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 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
{
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 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
{
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 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 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 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:
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ç

Ö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.
Sıkça Sorulan Sorular
HTML'yi C# içerisinde PDF'ye nasıl dönüştürebilirim?
HTML dizgilerini PDF'lere dönüştürmek için IronPDF'ün RenderHtmlAsPdf yöntemini kullanabilirsiniz. Ayrıca, HTML dosyalarını RenderHtmlFileAsPdf kullanarak PDF'lere dönüştürebilirsiniz.
C# dilindeki init anahtar kelimesinin amacı nedir?
Init anahtar kelimesi, yalnızca nesne başlatma sırasında ayarlanabilen ve sonradan değiştirilmezliği sağlayan özellikleri tanımlamanıza izin verir. Bu özellik, yaratıldıktan sonra değişmemesi gereken nesneleri oluşturmak için özellikle faydalıdır.
C# dilinde init anahtar kelimesi nesne değişmezliğini nasıl geliştirir?
Init anahtar kelimesi, özelliklerin yalnızca nesnenin başlangıç aşamasında ayarlanmasını mümkün kılar, sonrasında herhangi bir değişikliği engeller. Bu, nesnelerin yaratıldıktan sonra değişmez kalmasını garanti eder.
Init özellikleri PDF oluşturma kütüphaneleriyle kullanılabilir mi?
Evet, init özellikleri, PDF oluşturma sırasında kullanılan verilerin süreç boyunca tutarlı kalmasını sağlamak için IronPDF gibi kütüphanelerle kullanılabilir.
Init anahtar kelimesini geleneksel set edicilere tercih etmenin avantajları nelerdir?
Init anahtar kelimesini geleneksel set edicilere tercih etmek değişmezliği teşvik eder, uzun yapıcı koduna olan ihtiyacı azaltır ve nesne özelliklerinin başlatma sonrası değiştirilemeyeceğini garanti eder.
C# ile değişmez özelliklerle PDF oluşturmayı nasıl entegre edebilirim?
Init özelliklerini kullanarak değişmez nesneler oluşturabilir ve bu nesneleri IronPDF'e iletebilirsiniz, bu da tutarlı ve güvenilir PDF belgeleri oluşturmak için verileri kullanabilir.
Init anahtar kelimesi modern C# uygulamaları oluşturmada ne rol oynar?
Init anahtar kelimesi, geliştiricilerin kısa sözdizimi ile değişmez nesneler tanımlamasına olanak tanıyarak kod güvenliğini artırır ve hataları azaltır, böylece modern C# uygulamaları oluşturmakta önemli bir rol oynar.
C# projesine PDF oluşturma kütüphanesi nasıl kurulur?
NuGet Paket Yöneticisi ile şu komutu kullanarak projenize IronPDF gibi bir kütüphane kurabilirsiniz: Install-Package IronPdf.
Uygulama geliştirmede değişmezlik neden önemlidir?
Değişmezlik, veri bütünlüğünü ve uygulama genelinde tutarlılığını sağlayarak bakımı kolaylaştırır ve hata olasılığını azaltır.
Init anahtar kelimesinin kullanımını gösteren pratik örnekler nelerdir?
Init anahtar kelimesini kullanarak başlangıç sırasında ayarlanabilen özelliklere sahip bir sınıf tanımlamak, yaratılan nesnenin değişmeden kalmasını sağlamak için pratik bir örnektir. Bu, veri tutarlılığının kritik olduğu senaryolar için özellikle faydalıdır.




