Altbilgi içeriğine atla
.NET YARDıM

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.
$vbLabelText   $csharpLabel

C# Init Anahtar Kelimesi (Geliştiriciler İçin Nasıl Çalışır): Şekil 1 - Init-yalnızca olarak işaretlenen özellikler nedeniyle IDE'nin hata vermesi

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"
}
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

IronPDF'ye Giriş

C# Init Anahtar Kelimesi (Geliştiriciler İçin Nasıl Çalışır): Şekil 2 - IronPDF: C# PDF Kütüphanesi

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
$vbLabelText   $csharpLabel

Sonuç

C# Init Anahtar Kelimesi (Geliştiriciler İçin Nasıl Çalışır): Şekil 3 - IronPDF Lisanslama Sayfası

Ö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.

Jacob Mellor, Teknoloji Direktörü @ Team Iron
Chief Technology Officer

Jacob Mellor, Iron Software'in Teknoloji Müdürü ve C# PDF teknolojisinin öncüsü olan vizyoner bir mühendis. Iron Software’in temel kod tabanının ilk geliştiricisi olarak, şirketin ürün mimarisini kuruluşundan bu yana şekillendirdi ve CEO Cameron Rimington ile birlikte NASA, Tesla ve ...

Daha Fazlasını Oku

Iron Destek Ekibi

Haftanın 5 günü, 24 saat çevrimiçiyiz.
Sohbet
E-posta
Beni Ara