C# Birincil Kurucu (Geliştiriciler İçin Nasıl Çalışır)
C# programlamasının nesne yönelimli dünyasında, Birincil Yapıcıların tanıtımı dile yeni bir zarafet ve basitlik düzeyi getiriyor. Birincil yapıcılar, engelleyiciler ve koleksiyon ifadeleri gibi özelliklerle birlikte, parametreli yapıcıları daha özlü bir sözdizimi sağlayarak C# 12'de güçlü bir özellik olarak ortaya çıkmıştır. Birincil yapıcıları detaylı olarak inceleyebilir ve Microsoft C# kılavuzu üzerinde detaylı bilgi bulabilirsiniz.
Bu makalede, C# 12 Birincil Yapıcılarını verimli bir şekilde kullanmayı, işlevselliklerini, kullanım durumlarını ve geliştiricilerin sınıf başlatmaya yaklaşımını nasıl değiştirdiklerini inceleyeceğiz.
Understanding the Basics: Constructors in C
Yapıcılar, nesne yönelimli programlamada nesneleri başlatmak için bir plan olarak önemli bir rol oynar. Geleneksel olarak C# geliştiricileri, sınıflarının ilk durumunu kurmak için varsayılan veya parametreli yapıcıları kullanmışlardır. Ancak, Birincil Yapıcıların tanıtımı, C# geliştirmenin bu temel yönüne daha düzene sokulmuş bir yaklaşım ekler.
Birincil Yapıcıların Özeti
C#'taki Birincil Yapıcı, özellikleri doğrudan sınıf bildiriminde tanımlamak ve başlatmak için özlü bir yoldur. Bu, özelliklere değer atama ve tanımlama sürecini basitleştirir, daha deklaratif ve okunabilir bir sözdizimi sunar.
Birincil Yapıcıların Faydaları
- Özlü Yazım: Birincil yapıcılar, boilerplate kodunu azaltan ve okunabilirliği artıran kısa bir sözdizimi sağlar.
- Kapsam: Geleneksel yapıcılardan farklı olarak, birincil yapıcılardaki parametreler, tüm sınıf veya yapı boyunca kapsam içindedir ve bu da kullanımda esneklik sağlar.
- Varsayılan Değerler: Varsayılan parametre değerleri nesne oluşturmayı basitleştirir ve geliştiriciler için daha kullanışlı hale getirir.
Birincil Yapıcıyı Beyan Etme
Bir Birincil Yapıcının sözdizimi, özellikleri doğrudan sınıf başlığında bildirerek gerçekleştirilir. Temel bir Person sınıf örneğini ele alalım:
public class Person(string name, int age)
{
public string Name { get; } = name;
public int Age { get; } = age;
public override string ToString() => $"Name: {Name}, Age: {Age}";
}
public class Person(string name, int age)
{
public string Name { get; } = name;
public int Age { get; } = age;
public override string ToString() => $"Name: {Name}, Age: {Age}";
}
Public Class Person(String name, Integer age)
Public ReadOnly Property Name() As String = name
Public ReadOnly Property Age() As Integer = age
Public Overrides Function ToString() As String
Return $"Name: {Name}, Age: {Age}"
End Function
End Class
Yukarıdaki kod parçasında, Person sınıfı, örnek üye Name ve örnek üye Age özelliklerini başlatan bir Birincil Yapıcıya sahiptir. Yapıcı parametreleri, sınıf veya yapı adı ile birlikte bildirilmiş olup, genel özellikler belirlerken parametre değerleri onlara atanır.
Örnek 1: 2D Uzayda Değişmez Nokta
public readonly struct Point(double x, double y)
{
public double X { get; } = x;
public double Y { get; } = y;
public double Magnitude => Math.Sqrt(X * X + Y * Y);
}
public readonly struct Point(double x, double y)
{
public double X { get; } = x;
public double Y { get; } = y;
public double Magnitude => Math.Sqrt(X * X + Y * Y);
}
'INSTANT VB WARNING: VB has no equivalent to the C# readonly struct:
'ORIGINAL LINE: public readonly struct Point(double x, double y)
Public Structure Point(Double x, Double y)
Public ReadOnly Property X() As Double = x
Public ReadOnly Property Y() As Double = y
Public ReadOnly Property Magnitude() As Double
Get
Return Math.Sqrt(X * X + Y * Y)
End Get
End Property
End Structure
Bu örnekte, Point yapısının birincil yapıcısı, X ve Y özelliklerini başlatır ve dilin ne kadar özlü ve ifade edici olabileceğini gösterir.
Örnek 2: Varsayılan Ayarlarla Yapılandırılabilir Günlükçü
public class Logger(string filePath = "log.txt", LogLevel level = LogLevel.Info)
{
private readonly string _filePath = filePath;
private readonly LogLevel _level = level;
public void Log(string message)
{
// Actual logging implementation using _filePath and _level
}
}
public class Logger(string filePath = "log.txt", LogLevel level = LogLevel.Info)
{
private readonly string _filePath = filePath;
private readonly LogLevel _level = level;
public void Log(string message)
{
// Actual logging implementation using _filePath and _level
}
}
'INSTANT VB TODO TASK: The following line contains an assignment within expression that was not extracted by Instant VB:
'ORIGINAL LINE: public class Logger(string filePath = "log.txt", LogLevel level = LogLevel.Info)
Public Class Logger(String filePath = "log.txt", LogLevel level = LogLevel.Info)
Private ReadOnly _filePath As String = filePath
Private ReadOnly _level As LogLevel = level
Public Sub Log(ByVal message As String)
' Actual logging implementation using _filePath and _level
End Sub
End Class
Burada, Logger sınıfının birincil yapıcısı, varsayılan değerleri filePath ve level için sağlar, bu da kullanmayı esnek ve kolay hale getirirken yapılandırılabilirliği korur.
Örnek 3: Bağımlılık Enjeksiyonu
public interface IService
{
Distance GetDistance();
}
public class ExampleController(IService service) : ControllerBase
{
public ActionResult<Distance> Get() => service.GetDistance();
}
public interface IService
{
Distance GetDistance();
}
public class ExampleController(IService service) : ControllerBase
{
public ActionResult<Distance> Get() => service.GetDistance();
}
Public Interface IService
Function GetDistance() As Distance
End Interface
Public Class ExampleController(IService service)
Inherits ControllerBase
Public Function [Get]() As ActionResult(Of Distance)
Return service.GetDistance()
End Function
End Class
Birincil yapıcılar, bağımlılık enjeksiyonu senaryolarına uygundur. Bu örnekte, bir denetleyici sınıf ihtiyaçlarını belirtir, sürdürülebilirliği artırır ve birim testi kolaylaştırır.
Örnek 4: Geometrik Şekil Hiyerarşisi Oluşturma
public abstract class Shape(double width, double height)
{
public double Width { get; } = width;
public double Height { get; } = height;
public abstract double CalculateArea();
}
public class Rectangle(double width, double height) : Shape(width, height)
{
public override double CalculateArea() => Width * Height;
}
public class Circle : Shape
{
public Circle(double radius) : base(radius * 2, radius * 2) { }
public override double CalculateArea() => Math.PI * Math.Pow(Width / 2, 2);
}
public abstract class Shape(double width, double height)
{
public double Width { get; } = width;
public double Height { get; } = height;
public abstract double CalculateArea();
}
public class Rectangle(double width, double height) : Shape(width, height)
{
public override double CalculateArea() => Width * Height;
}
public class Circle : Shape
{
public Circle(double radius) : base(radius * 2, radius * 2) { }
public override double CalculateArea() => Math.PI * Math.Pow(Width / 2, 2);
}
Public MustInherit Class Shape(Double width, Double height)
Public ReadOnly Property Width() As Double = width
Public ReadOnly Property Height() As Double = height
Public MustOverride Function CalculateArea() As Double
End Class
Public Class Rectangle(Double width, Double height)
Inherits Shape(width, height)
Public Overrides Function CalculateArea() As Double
Return Width * Height
End Function
End Class
Public Class Circle
Inherits Shape
Public Sub New(ByVal radius As Double)
MyBase.New(radius * 2, radius * 2)
End Sub
Public Overrides Function CalculateArea() As Double
Return Math.PI * Math.Pow(Width / 2, 2)
End Function
End Class
Bu örnekte, Shape sınıfındaki birincil yapıcı, geometrik bir şekil hiyerarşisi oluşturmanın temelini oluşturur. Rectangle ve Circle gibi alt sınıflar, tutarlı başlatma için birincil yapıcıdan yararlanır. Rectangle sınıfı, birincil yapıcıyı kendisi bildirir ve ardından yakalanan birincil yapıcı parametrelerini Shape sınıfı birincil parametrelerine geçirir. Circle sınıfı, yapıyı tüm sınıf boyunca tanımlayarak esnekliği gösterir ve sonra parametrelerini Shape yapıcı için varsayılan değerler olarak base anahtarını kullanarak iletir.
IronPDF Tanıtımı
IronPDF, geliştiricilere PDF dosyalarını zahmetsizce oluşturma, manipüle etme ve dönüştürme yetkisi veren çok yönlü bir C# kütüphanesidir. İster faturalar, raporlar ister başka herhangi bir belgenin oluşturulması olsun, IronPDF HTML içeriğini doğrudan C# uygulamanızda cilalı ve profesyonel PDF'lere sorunsuz bir şekilde dönüştürmenizi sağlar.
IronPDF, geliştiriciler için web sayfalarını, URL'leri ve HTML'yi PDF'ye dönüştürmelerine imkan tanıyan kullanışlı bir araçtır. En iyi yanı, PDF'lerin tüm biçimlendirme ve stiller korunarak orijinal web sayfaları gibi görünmesidir. Raporlar ve faturalar gibi web içeriğinden PDF oluşturmak için mükemmeldir.
using IronPdf;
class Program
{
static void Main(string[] args)
{
var renderer = new ChromePdfRenderer();
// 1. Convert HTML String to PDF
var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");
// 2. Convert HTML File to PDF
var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");
// 3. Convert URL to PDF
var url = "http://ironpdf.com"; // Specify the URL
var pdfFromUrl = renderer.RenderUrlAsPdf(url);
pdfFromUrl.SaveAs("URLToPDF.pdf");
}
}
using IronPdf;
class Program
{
static void Main(string[] args)
{
var renderer = new ChromePdfRenderer();
// 1. Convert HTML String to PDF
var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");
// 2. Convert HTML File to PDF
var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");
// 3. Convert URL to PDF
var url = "http://ironpdf.com"; // Specify the URL
var pdfFromUrl = renderer.RenderUrlAsPdf(url);
pdfFromUrl.SaveAs("URLToPDF.pdf");
}
}
Imports IronPdf
Friend Class Program
Shared Sub Main(ByVal args() As String)
Dim renderer = New ChromePdfRenderer()
' 1. Convert HTML String to PDF
Dim htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>"
Dim pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent)
pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf")
' 2. Convert HTML File to PDF
Dim htmlFilePath = "path_to_your_html_file.html" ' Specify the path to your HTML file
Dim pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath)
pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf")
' 3. Convert URL to PDF
Dim url = "http://ironpdf.com" ' Specify the URL
Dim pdfFromUrl = renderer.RenderUrlAsPdf(url)
pdfFromUrl.SaveAs("URLToPDF.pdf")
End Sub
End Class

IronPDF Kurulumu: Hızlı Başlangıç
IronPDF'yi C# projenize dahil etmek için, IronPDF NuGet paketini kurarak başlayın. Paket Yöneticisi Konsolunda aşağıdaki komutu yürütün:
Install-Package IronPdf
Alternatif olarak, "IronPDF"yi NuGet Paket Yöneticisi'nde bulun ve bu noktamalı paket yüklemesine devam edin.

IronPDF ile PDF Oluşturma
IronPDF kullanarak bir PDF oluşturmak düzenli bir süreçtir. Aşağıdaki örneğe bakın:
var htmlContent = "<html><body><h1>Hello, IronPDF!</h1></body></html>";
// Create a new PDF document
var pdfDocument = new IronPdf.ChromePdfRenderer();
pdfDocument.RenderHtmlAsPdf(htmlContent).SaveAs("C:/GeneratedDocument.pdf");
var htmlContent = "<html><body><h1>Hello, IronPDF!</h1></body></html>";
// Create a new PDF document
var pdfDocument = new IronPdf.ChromePdfRenderer();
pdfDocument.RenderHtmlAsPdf(htmlContent).SaveAs("C:/GeneratedDocument.pdf");
Dim htmlContent = "<html><body><h1>Hello, IronPDF!</h1></body></html>"
' Create a new PDF document
Dim pdfDocument = New IronPdf.ChromePdfRenderer()
pdfDocument.RenderHtmlAsPdf(htmlContent).SaveAs("C:/GeneratedDocument.pdf")
Bu örnekte, IronPDF HTML içeriğini bir PDF belgesine render etmek için kullanılır ve ardından belirli bir konuma kaydedilir. C#'da PDF oluşturma ve değiştirme hakkında daha fazla ayrıntı için, bu tam öğretici bağlantıyı ziyaret edin ve daha fazlasını keşfetmek için bu belgeleme sayfasını ziyaret edin.
C# Ana Yapıcılar: Bir Sınıf Başlatma Devrimi
C# Primary Constructors, sınıf özelliklerini doğrudan sınıf bildiriminde başlatmaya yönelik deklaratif ve düzenli bir yaklaşım sunar. Bu şık özelliği IronPDF ile sorunsuz bir şekilde entegre edip edemeyeceğimizi keşfedelim.
C# Ana Yapıcılarının IronPDF ile Entegrasyonu
Her ne kadar C# Primary Constructors, öncelikli olarak sınıf başlatmaya odaklanmış bir dil özelliği olsa da, IronPDF ile doğrudan entegrasyonları yaygın bir kullanım durumu olmayabilir. IronPDF'in temel işlevselliği, PDF belgelerinin oluşturulması ve manipülasyonunda yer alır ve sınıf başlatmanın ayrıntıları bu iş akışı ile doğrudan uyumlu olmayabilir.
Ancak, IronPDF yapılandırmaları veya veri modelleri ile ilgili özel sınıflar veya yapılar tanımlarken C# Primary Constructors'ı kullanabilirsiniz. Örneğin, uygulamanız PDF ile ilgili ayarları veya yapılandırmaları yönetmek için belirli bir sınıf yapısı gerektiriyorsa, C# Primary Constructors bu sınıfların düzgün bir başlatılması için değerli bir araç olabilir.
public class PdfGenerationSettings(string title, bool includeHeader, bool includeFooter)
{
public string Title { get; } = title;
public bool IncludeHeader { get; } = includeHeader;
public bool IncludeFooter { get; } = includeFooter;
// Additional properties...
}
// Usage with IronPDF
var pdfSettings = new PdfGenerationSettings("My PDF Title", true, false);
var renderOptions = new ChromePdfRenderOptions
{
PaperSize = IronPdf.Rendering.PdfPaperSize.A4,
MarginTop = 20,
MarginBottom = 20,
MarginLeft = 10,
MarginRight = 10,
Title = pdfSettings.Title
};
// Apply settings from PdfGenerationSettings
if (pdfSettings.IncludeHeader)
{
renderOptions.TextHeader = new TextHeaderFooter
{
CenterText = "Page {page} of {total-pages}",
DrawDividerLine = true
};
}
var pdfDocument = new IronPdf.ChromePdfRenderer();
pdfDocument.RenderingOptions = renderOptions;
pdfDocument.RenderHtmlAsPdf("<html><body><h1>Hello, IronPDF!</h1></body></html>").SaveAs("CustomizedDocument.pdf");
public class PdfGenerationSettings(string title, bool includeHeader, bool includeFooter)
{
public string Title { get; } = title;
public bool IncludeHeader { get; } = includeHeader;
public bool IncludeFooter { get; } = includeFooter;
// Additional properties...
}
// Usage with IronPDF
var pdfSettings = new PdfGenerationSettings("My PDF Title", true, false);
var renderOptions = new ChromePdfRenderOptions
{
PaperSize = IronPdf.Rendering.PdfPaperSize.A4,
MarginTop = 20,
MarginBottom = 20,
MarginLeft = 10,
MarginRight = 10,
Title = pdfSettings.Title
};
// Apply settings from PdfGenerationSettings
if (pdfSettings.IncludeHeader)
{
renderOptions.TextHeader = new TextHeaderFooter
{
CenterText = "Page {page} of {total-pages}",
DrawDividerLine = true
};
}
var pdfDocument = new IronPdf.ChromePdfRenderer();
pdfDocument.RenderingOptions = renderOptions;
pdfDocument.RenderHtmlAsPdf("<html><body><h1>Hello, IronPDF!</h1></body></html>").SaveAs("CustomizedDocument.pdf");
Public Class PdfGenerationSettings(String title, Boolean includeHeader, Boolean includeFooter)
Public ReadOnly Property Title() As String = title
Public ReadOnly Property IncludeHeader() As Boolean = includeHeader
Public ReadOnly Property IncludeFooter() As Boolean = includeFooter
' Additional properties...
End Class
' Usage with IronPDF
Private pdfSettings = New PdfGenerationSettings("My PDF Title", True, False)
Private renderOptions = New ChromePdfRenderOptions With {
.PaperSize = IronPdf.Rendering.PdfPaperSize.A4,
.MarginTop = 20,
.MarginBottom = 20,
.MarginLeft = 10,
.MarginRight = 10,
.Title = pdfSettings.Title
}
' Apply settings from PdfGenerationSettings
If pdfSettings.IncludeHeader Then
renderOptions.TextHeader = New TextHeaderFooter With {
.CenterText = "Page {page} of {total-pages}",
.DrawDividerLine = True
}
End If
Dim pdfDocument = New IronPdf.ChromePdfRenderer()
pdfDocument.RenderingOptions = renderOptions
pdfDocument.RenderHtmlAsPdf("<html><body><h1>Hello, IronPDF!</h1></body></html>").SaveAs("CustomizedDocument.pdf")
Bu örnekte, PdfGenerationSettings sınıfı, PDF oluşturma ayarları ile ilgili özellikleri başlatmak için bir C# Primary Constructor kullanıyor ve daha sonra hangi işleme seçeneklerinin eklenip hangilerinin atlanacağı belirlenebilir. Çıktı, birincil yapıcı parametresi kullanılarak ayarlandığı gibi bir başlık metni ve başlık içerir.

Sonuç
Sonuç olarak, C# Primary Constructors, sınıf başlatmaya rafine ve ifade edici bir yaklaşım sunar. Deklaratif sözdizimleri, kod okunabilirliğini artırır, değişmezliği teşvik eder ve varsayılan değerlerle nesne oluşturma sürecini basitleştirir. Özellikleri tanımlıyor, değişmezliği uyguluyor veya varsayılan değerleri benimsiyorsanız, Primary Constructors geliştiricilere C# programlamanın dinamik dünyasında sınıf başlatmanın sanatını öğrenmeleri için güç verir.
C# Primary Constructors ile IronPDF'in doğrudan entegrasyonu ana odak noktası olmasa da, bu iki eleman uyum içinde çalışabilir. C# Primary Constructors, sınıf başlatmayı netlik ve basitlikle geliştirmekte, böylece IronPDF iş akışlarıyla ilgili yapı veya yapılandırmaları tanımlarken değerli olarabilir.
IronPDF'in güçlü PDF oluşturma yeteneklerinden yararlanın ve sınıf başlatma zarafetinin önemli olduğu yerde C# Primary Constructors kullanın. Bu dinamik ikili, C# programlamanın canlı dünyasında belge oluşturma karmaşıklıklarını yaratıcılık ve etkinlikle gezinme konusunda size güç verir.
IronPDF bir ücretsiz deneme sunar ve lite lisansı $999'den başlar.
Sıkça Sorulan Sorular
Birincil Yapıcılar C# kodunu nasıl daha özlü hale getirir?
Birincil Yapıcılar, özellikleri doğrudan sınıf bildiriminde tanımlayıp başlatmanıza olanak tanır, böylece gereksiz kod miktarını azaltır ve okunabilirliği artırır.
C# 12'de tanıtılan yeni özellikler nelerdir?
C# 12, Birincil Yapıcılar, kesmeler ve koleksiyon ifadelerini tanıtarak geliştiricilere daha özlü ve güçlü sözdizimi seçenekleri sunar.
Birincil Yapıcılar değişmez veri yapılarıyla kullanılabilir mi?
Evet, Birincil Yapıcılar, salt okunur özelliklerin doğrudan yapıcı içinde başlatılmasına izin verdikleri için değişmez veri yapıları için uygundur.
HTML içeriğini C# kullanarak nasıl PDF'ye dönüştürebilirim?
ChromePdfRenderer sınıfını kullanarak HTML içeriğini PDF'ye dönüştürebilirsiniz, böylece formatlama ve stil çıktıda korunur.
PDF oluşturma için IronPDF kullanmanın avantajları nelerdir?
IronPDF, HTML'den PDF'ye dönüştürme, PDF birleştirme ve detaylı stil koruma gibi özellikleri destekleyerek C#'ta PDF dosyaları oluşturma ve düzenleme için sağlam bir platform sağlar.
Birincil Yapıcılar bağımlılık enjeksiyonunu nasıl geliştirir?
Birincil Yapıcılar, yapıcı parametrelerinde sınıf bağımlılıklarını açıkça belirterek bağımlılık grafiğinin kurulumu ve bakımını basitleştirir.
Birincil Yapıcılar PDF belgeleri oluşturma ile nasıl entegre edilebilir?
Birincil Yapıcılar, IronPDF gibi bir kütüphane kullanıldığında PDF ayarlarıyla ilişkili yapılandırma sınıflarını veya yapıları başlatmak için kullanılabilir ve kurulum sürecini kolaylaştırır.
Birincil Yapıcıların pratik örnekleri nelerdir?
Pratik örnekler arasında geometrik şekil hiyerarşilerinin başlatılması ve açıklık ve özlülüğün önemli olduğu bağımlılık enjeksiyonu senaryoları yer alır.
Geliştiriciler projelerinde IronPDF'yi nasıl kullanmaya başlayabilir?
Geliştiriciler, IronPDF NuGet paketini Paket Yöneticisi Konsolu veya NuGet Paket Yöneticisi aracılığıyla yükleyebilir ve uygulama detayları için kapsamlı dokümantasyona başvurabilirler.
IronPDF belge oluşturma iş akışlarında ne gibi bir rol oynar?
IronPDF, geliştiricilerin kolayca PDF oluşturup dönüştürmesine ve düzenlemesine olanak tanıyarak, diğer C# özellikleriyle sorunsuz entegrasyonu destekleyerek belge oluşturma iş akışlarını geliştirir.




