C# Kayda Karşı Sınıf (Geliştiriciler için Nasıl Çalışır)
C# dünyasında, verileri modellemek ve kapsüllemek için kullanılan iki ana yapı: sınıflar ve kayıtlar bulunmaktadır. Her ikisi de başvuru türüdür ancak amaçları, davranışları ve eşitliği nasıl ele aldıkları konusunda önemli ölçüde farklılık gösterirler. Bu kılavuz, bu farklılıkları inceleyecek, geliştiricilerin ihtiyaçlarına uygun doğru yapıyı seçmelerine yardımcı olacak açık örnekler ve pratik kullanımlar sunacaktır. Ayrıca, IronPDF kütüphanesi hakkında da bilgi edineceğiz.
C#'ta Sınıflar: Temeller
Sınıflar, C#'da nesne yönelimli programlamanın temel taşları olmuştur ve veri ve davranışları kapsüllemek için tasarlanmıştır. Referans türlerdir, yani aynı değerlere sahip iki sınıf örneği, iki ayrı nesne olarak kabul edilir. Bu ayırım, iki sınıf örneğini karşılaştırırken çok önemlidir; varsayılan karşılaştırma referans tabanlıdır, değer tabanlı değil.
public class Person
{
public int Id { get; set; }
public string FullName { get; set; }
}
public class Person
{
public int Id { get; set; }
public string FullName { get; set; }
}
Public Class Person
Public Property Id() As Integer
Public Property FullName() As String
End Class
Yukarıdaki örnekte, Person, Id ve FullName özelliklerine sahip bir sınıftır. İki Person örneği, aynı Id ve FullName değerlerine sahip olsa bile, varsayılan olarak eşit kabul edilmez çünkü bellek içerisinde iki farklı referanstır.
C#'ta Kayıtlar: Değişmez Veri Yapıları
C#'da tanıtılan kayıt türü, değiştirilemez veri yapıları oluşturmayı basitleştirmeyi amaçlayan ve geleneksel sınıf yapılarının güçlü bir alternatifini sunan daha yeni bir ektir. Sınıflardan farklı olarak, kayıtlar değer tabanlı eşitlik anlamını sunar, bu da onları veri aktarma nesneleri veya az ya da hiç davranışı olmayan küçük veri yapıları için ideal kılar.
public record Person(int Id, string FullName);
public record Person(int Id, string FullName);
'INSTANT VB TODO TASK: C# 'records' are not converted by Instant VB:
'public record Person(int Id, string FullName)
Yukarıdaki örnekte, kayıt tanımı daha özlüdür ve gereksiz kodları azaltır. Kayıtlar otomatik olarak yıkıcı olmayan mutasyon ve değer tabanlı karşılaştırmayı destekler. Aynı değerlere sahip iki kayıt örneği eşit kabul edilir, bu da değer semantikleriyle uyumludur.
Pratik Kullanımlar: Kayıt ve Sınıf Ne Zaman Kullanılır?
C#'da bir sınıf ve kayıt veya diğer veri yapıları arasında seçim yapmak, modellediğiniz verinin karmaşıklığına ve uygulamanızın gerektirdiği davranışlara bağlıdır. Sınıflar, kompleks veri yapıları için özel olarak tasarlanmıştır, davranışları (yöntemleri) içerecek şekilde ve gerektiğinde değiştirilebilir örnekler oluşturma imkanı tanır. Kayıtlar ise, değişmez özelliklerle tasarlanmış basit veri yapılarının mükemmel örnekleridir ve oluşturulduktan sonra sabit kalan veriler için idealdir.
Sınıflar, verileri ve davranışları kapsamak veya verilerin oluşturulduktan sonra manipüle edilmesi gerektiğinde idealdir. Bu esneklik, sınıfları çoğu geleneksel nesne yönelimli programlama senaryoları ve karmaşık veri yapıları oluştururken vazgeçilmez hale getirir.
Kayıtlar ise, özellikle veri değişmezliğinin önemli olduğu veya basit veri yapılarıyla ilgilenildiğinde, öne çıkar. Yerleşik değer tabanlı eşitliği ve özlü sözdizimi, onları veri aktarım nesneleri veya değer nesneleri için mükemmel hale getirir.
Değer Türleri ve Referans Türleri
C#'da değer türleri ve referans türleri arasındaki farkı anlamak çok önemlidir. Sınıflar referans türlerdir, yani değişkenler bellekdeki gerçek veriye bir referans tutar. Bu özellik, varsayılan referans tabanlı eşitlik karşılaştırmasına yol açar.
Kayıtlar, aynı zamanda referans türleri olmasına rağmen, yerleşik değer temelli eşitlik aracılığıyla değer semantiklerini taklit eder ve bu da onları karşılaştırmalarda biraz değer türleri gibi davranır hale getirir.
Kod Örnekleri: Sınıflar ve Kayıtlar Uygulama
Sınıf ve kayıt arasındaki farkları, sözdizimi ve davranışlarla vurgulamak üzere bir sınıf ve bir kayıt uygulayalım.
Sınıf Uygulaması:
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public Product(int id, string name)
{
Id = id;
Name = name;
}
}
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public Product(int id, string name)
{
Id = id;
Name = name;
}
}
Public Class Product
Public Property Id() As Integer
Public Property Name() As String
Public Sub New(ByVal id As Integer, ByVal name As String)
Me.Id = id
Me.Name = name
End Sub
End Class
Kayıt Uygulaması:
public record Product(int Id, string Name);
public record Product(int Id, string Name);
'INSTANT VB TODO TASK: C# 'records' are not converted by Instant VB:
'public record Product(int Id, string Name)
Kayıt uygulamasının kısalığı ve sadeliğine dikkat edin. Kayıt, yapılandırıcının, özelliklerin ve değer tabanlı eşitlik yöntemlerinin otomatik olarak üretilmesini sağlar.
Eşitliği Anlamak: Referans vs. Değer
C#'daki sınıf ve kayıt türleri arasındaki temel fark, eşitliği nasıl ele aldıklarıdır:
-
Sınıflar, varsayılan olarak referans eşitliği kullanır, yani iki örnek aynı bellek konumunu işaret ediyorsa eşit olarak kabul edilir.
- Kayıtlar, varsayılan olarak değer eşitliğini kullanır, yani iki örnek, özelliklerinin aynı değerlere sahip olması durumunda eşit olarak kabul edilir.
Referans Eşitliği Örneği (Sınıf)
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
}
var classInstance1 = new Person { Id = 1, Name = "Iron Software" };
var classInstance2 = new Person { Id = 1, Name = "Iron Software" };
Console.WriteLine(classInstance1 == classInstance2); // Outputs: False
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
}
var classInstance1 = new Person { Id = 1, Name = "Iron Software" };
var classInstance2 = new Person { Id = 1, Name = "Iron Software" };
Console.WriteLine(classInstance1 == classInstance2); // Outputs: False
Public Class Person
Public Property Id() As Integer
Public Property Name() As String
End Class
Private classInstance1 = New Person With {
.Id = 1,
.Name = "Iron Software"
}
Private classInstance2 = New Person With {
.Id = 1,
.Name = "Iron Software"
}
Console.WriteLine(classInstance1 = classInstance2) ' Outputs: False
Aynı özellik değerlerine sahip iki sınıf örneği, bellek içinde farklı nesneler olduklarından eşit kabul edilmez.
Değer Eşitliği Örneği
public record Person(int Id, string Name);
var recordInstance1 = new Person(1, "Iron Software");
var recordInstance2 = new Person(1, "Iron Software");
Console.WriteLine(recordInstance1 == recordInstance2); // Outputs: True
public record Person(int Id, string Name);
var recordInstance1 = new Person(1, "Iron Software");
var recordInstance2 = new Person(1, "Iron Software");
Console.WriteLine(recordInstance1 == recordInstance2); // Outputs: True
'INSTANT VB TODO TASK: C# 'records' are not converted by Instant VB:
'public record Person(int Id, string Name)
Private recordInstance1 = New Person(1, "Iron Software")
Private recordInstance2 = New Person(1, "Iron Software")
Console.WriteLine(recordInstance1 = recordInstance2) ' Outputs: True
Aynı özellik değerlerine sahip iki kayıt örneği varsayılan olarak eşit kabul edilir.
Gelişmiş Özellikler: Kayıtlar
Kayıtlar, değiştirilemez veri yapıları ve değer temelli eşitlik ihtiyaçlarına hitap eden çeşitli gelişmiş özelliklerle birlikte gelir. with ifadesi, mevcut bir kaydı kopyalayarak ve bazı özellikler değiştirilerek yeni bir kayıt örneği oluşturmanıza olanak tanır, bu da yıkıcı olmayan mutasyonu göstermektedir.
Kayıtlarla Yıkıcı Olmayan Mutasyon:
var originalRecord = new Person(1, "Doe");
var modifiedRecord = originalRecord with { Name = "Iron Developer" };
var originalRecord = new Person(1, "Doe");
var modifiedRecord = originalRecord with { Name = "Iron Developer" };
Dim originalRecord = New Person(1, "Doe")
'INSTANT VB TODO TASK: C# 'with expressions' are not converted by Instant VB:
'var modifiedRecord = originalRecord with { Name = "Iron Developer" }
Bu özellik, değiştirilemez veri yapılarıyla çalışırken, orijinal veriyi değiştirmeden bir örneği "değiştirme" olanağı sunduğundan kullanışlıdır.
IronPDF Kütüphanesi Tanıtımı

IronPDF, doğrudan .NET uygulamaları içinde PDF belgeleri oluşturma, düzenleme ve yönetme için kapsamlı bir çözüm sunan .NET geliştiricilerine yönelik bir PDF kütüphanesidir. Geliştiricilerin HTML'yi PDF'lere, CSS, JavaScript ve resimleri PDF'lere dönüştürmesine olanak tanıyarak PDF oluşturma sürecini basitleştirir. IronPDF, Windows, Linux ve macOS gibi çeşitli işletim sistemlerinde, web, masaüstü ve konsol uygulamaları dahil olmak üzere farklı .NET çerçeveleri ve proje türlerini destekler.
PDF oluşturmanın ötesinde, IronPDF PDF'leri düzenleme, özellikler ve güvenliği ayarlama, PDF formlarıyla çalışma ve içerik çıkarma yetenekleri sunar. .NET projelerine PDF işlevselliğini entegre etmek için güvenilir bir araç arayan geliştiricilerin ihtiyaçlarını karşılamak üzere tasarlanmıştır.
Kod Örneği
C# kullanarak IronPDF ile PDF oluşturma, hem sınıf hem de kayıtlarla gerçekleştirilebilir. Basit bir PDF belge oluşturmanın her iki yaklaşımla nasıl yapılacağını gösteren örnekler aşağıda: C#'da sınıflar ve kayıtlar arasındaki temel fark, kullanım amaçlarında yatar: sınıflar varsayılan olarak değiştirilebilirdir ve geleneksel nesne yönelimli programlama için tasarlanmışken, kayıtlar değişmezdir ve veri temelli programlama için tasarlanmıştır, bu da onları veri modelleme için ideal hale getirir.
Bir Sınıf Kullanma
Bu örnekte, verilen bir HTML dizesinden PDF oluşturmak için bir yönteme sahip bir PdfGenerator sınıfı tanımlayacağız.
using IronPdf;
using System;
public class PdfGenerator
{
public string HtmlContent { get; set; }
public PdfGenerator(string htmlContent)
{
HtmlContent = htmlContent;
}
public void GeneratePdf(string filePath)
{
var renderer = new ChromePdfRenderer();
var pdfDocument = renderer.RenderHtmlAsPdf(HtmlContent);
pdfDocument.SaveAs(filePath);
}
}
class Program
{
public static void Main(string[] args)
{
License.LicenseKey = "License-Key"; // Set your license key here
var generator = new PdfGenerator("<h1>Hello, World from Class!</h1>");
generator.GeneratePdf("ClassExample.pdf");
}
}
using IronPdf;
using System;
public class PdfGenerator
{
public string HtmlContent { get; set; }
public PdfGenerator(string htmlContent)
{
HtmlContent = htmlContent;
}
public void GeneratePdf(string filePath)
{
var renderer = new ChromePdfRenderer();
var pdfDocument = renderer.RenderHtmlAsPdf(HtmlContent);
pdfDocument.SaveAs(filePath);
}
}
class Program
{
public static void Main(string[] args)
{
License.LicenseKey = "License-Key"; // Set your license key here
var generator = new PdfGenerator("<h1>Hello, World from Class!</h1>");
generator.GeneratePdf("ClassExample.pdf");
}
}
Imports IronPdf
Imports System
Public Class PdfGenerator
Public Property HtmlContent() As String
Public Sub New(ByVal htmlContent As String)
Me.HtmlContent = htmlContent
End Sub
Public Sub GeneratePdf(ByVal filePath As String)
Dim renderer = New ChromePdfRenderer()
Dim pdfDocument = renderer.RenderHtmlAsPdf(HtmlContent)
pdfDocument.SaveAs(filePath)
End Sub
End Class
Friend Class Program
Public Shared Sub Main(ByVal args() As String)
License.LicenseKey = "License-Key" ' Set your license key here
Dim generator = New PdfGenerator("<h1>Hello, World from Class!</h1>")
generator.GeneratePdf("ClassExample.pdf")
End Sub
End Class
Çıktı:

Bir Kayıt Kullanma
Ek olarak, bir C# kaydı başlatıldıktan sonra değiştirilemez. Benzer bir sonucu bir kayıt ile, değişiklikler için with ifadeleri kullanarak nasıl elde edebileceğinizi burada görebilirsiniz. Bu, esasen istenen değişikliklere sahip yeni bir kayıt örneği döndürür.
using IronPdf;
using System;
public record PdfGeneratorRecord(string HtmlContent)
{
public void GeneratePdf(string filePath)
{
var renderer = new ChromePdfRenderer();
var pdfDocument = renderer.RenderHtmlAsPdf(this.HtmlContent);
pdfDocument.SaveAs(filePath);
}
}
class Program
{
public static void Main(string[] args)
{
License.LicenseKey = "License-Key"; // Set your license key here
var recordGenerator = new PdfGeneratorRecord("<h1>Hello, World from Record!</h1>");
recordGenerator.GeneratePdf("RecordExample.pdf");
}
}
using IronPdf;
using System;
public record PdfGeneratorRecord(string HtmlContent)
{
public void GeneratePdf(string filePath)
{
var renderer = new ChromePdfRenderer();
var pdfDocument = renderer.RenderHtmlAsPdf(this.HtmlContent);
pdfDocument.SaveAs(filePath);
}
}
class Program
{
public static void Main(string[] args)
{
License.LicenseKey = "License-Key"; // Set your license key here
var recordGenerator = new PdfGeneratorRecord("<h1>Hello, World from Record!</h1>");
recordGenerator.GeneratePdf("RecordExample.pdf");
}
}
Imports IronPdf
Imports System
'INSTANT VB TODO TASK: C# 'records' are not converted by Instant VB:
'public record PdfGeneratorRecord(string HtmlContent)
'{
' public void GeneratePdf(string filePath)
' {
' var renderer = New ChromePdfRenderer();
' var pdfDocument = renderer.RenderHtmlAsPdf(Me.HtmlContent);
' pdfDocument.SaveAs(filePath);
' }
'}
Friend Class Program
Public Shared Sub Main(ByVal args() As String)
License.LicenseKey = "License-Key" ' Set your license key here
Dim recordGenerator = New PdfGeneratorRecord("<h1>Hello, World from Record!</h1>")
recordGenerator.GeneratePdf("RecordExample.pdf")
End Sub
End Class
Çıktı:

Bu örnekler, C#'da IronPDF kullanarak hem sınıf hem de kayıtlarla nasıl PDF dosyası oluşturulacağını göstermektedir. "Sonrasında değiştirilecek olması gereken nesneler için sınıf daha uygun olabilir." Oluşturulduktan sonra değişmemesi gereken verilerle ilgileniyorsanız veya değişmezliğin sözdizimsel sadeliğini ve emniyetini beğeniyorsanız, bir kayıt daha iyi bir seçim olabilir.
Sonuç

Sonuç olarak, sınıflar değiştirilebilir durum ve başvuru bazlı eşitlik ile geleneksel nesne yönelimli özellikler sunarken, kayıtlar değiştirilemez veri yapıları tanımlamak için modern bir yaklaşım sunar ve değer bazlı eşitlik sağlar.
Bir sınıf veya kayıt kullanma tercihi, uygulamanızın belirli gereksinimleri, değişmezliğe olan ihtiyaç, veri yapısının karmaşıklığı ve tercih edilen eşitlik karşılaştırma yöntemi gibi faktörler göz önünde bulundurularak yönlendirilmelidir. IronPDF'nin Ücretsiz Denemesini Keşfedin, .NET uygulamalarınıza PDF işlevselliği entegre etmek isteyenler için, lisanslar $999 ile başlamaktadır.
Sıkça Sorulan Sorular
C# sınıfları ve kayıtları arasındaki temel farklar nelerdir?
C# sınıfları ve kayıtları, verileri modellemek ve kapsüllemek için kullanılan referans tipleridir, ancak eşitlik ve değişmezliği nasıl ele aldıklarında farklılık gösterirler. Sınıflar, aynı bellek konumuna işaret ederlerse iki örnek eşit kabul edilen referans eşitliğini kullanır. Öte yandan, kayıtlar, özelliklerinin aynı değerlere sahip olup olmadığını dikkate alarak değer eşitliğini kullanır ve varsayılan olarak değişmez olacak şekilde tasarlanmıştır.
C#'da bir sınıf veya kayıt kullanma konusunda nasıl karar verebilirim?
C#'da bir sınıf veya kayıt kullanma seçimi, özel gereksinimlerinize bağlıdır. Nesne yönelimli programlamada tipik olan veri ve davranışları kapsüllemeniz veya uyumlu amaçlar için değiştirilebilir örnekler gereksinimiz varsa bir sınıf kullanın. Yapınız basit, sabit ve değer temelli eşitliğe ihtiyacınız olduğunda, örneğin veri aktarım nesnelerinde, bir kayıt tercih edin.
IronPDF kütüphanesi .NET'te PDF oluşturmayı nasıl destekler?
IronPDF, PDF belgeleri oluşturmayı, düzenlemeyi ve yönetmeyi basitleştiren sağlam bir .NET PDF kütüphanesidir. HTML, CSS, JavaScript ve resimleri PDF'lere dönüştürmesine izin verir, çeşitli .NET çerçeveleri ve işletim sistemlerini destekler, bu da .NET geliştiricileri için vazgeçilmez bir araçtır.
PDF oluşturma projelerinde hem C# sınıflarını hem de kayıtlarını kullanabilir miyim?
Evet, PDF oluşturma projelerinde hem C# sınıfları hem de kayıtlar kullanılabilir. Seçim, mantığınız için değişken veya sabit veri yapıları gereksiniminize bağlıdır. Örneğin, IronPDF hem yapılarla uyum içinde çalışabilir ve PDF'ler oluşturup manipüle edebilir.
C# kayıtlarında değişmezlik ne rol oynar?
Değişmezlik, C# kayıtlarının temel bir özelliğidir. Bir kez oluşturulduktan sonra, bir kaydın özellikleri değiştirilemez, bu da değer tabanlı eşitlik semantiği ile uyumludur. Bu tasarım, veri durumunun ve bütünlüğünün kritik önem taşıdığı, örneğin veri aktarım nesneleri gibi senaryolarda kayıtları ideal kılar.
IronPDF, .NET uygulamaları için PDF işlevselliklerini nasıl geliştirir?
IronPDF, HTML'i PDF'e dönüştürme, PDF'leri düzenleme ve belge güvenliğini yönetme gibi özellikler sunarak .NET uygulamaları için PDF işlevselliklerini geliştirir. Formlarla çalışmayı destekler, içeriği çıkartır ve farklı .NET ortamları arasında sorunsuzca entegre olur, böylece PDF belge işlemlerini kolaylaştırır.
C# kayıtlarının 'with' ifadesi nedir?
C# kayıtlarındaki 'with' ifadesi, yıkıcı olmayan mutasyon için kullanılır. Geliştiricilerin mevcut bir kayıt örneğini kopyalayarak fakat bazı özelliklerini değiştirerek, orijinal verinin değiştirilmeden kalmasını sağlar.
Kayıtlar neden veri aktarım nesneleri için uygun kabul edilir?
Kayıtlar, değer temelli eşitlik ile sabit yapıları tanımlamak için özlü bir sözdizimi sundukları için veri aktarım nesneleri olarak uygun kabul edilir. Bu, veri bütünlüğünün korunmasını ve aynı değerlere sahip örneklerin eşit kabul edildiğinden emin olur, bu sıklıkla veri aktarım senaryolarında gerekli olan bir durumdur.




