C# Kayda Karşı Sınıf (Geliştiriciler için Nasıl Çalışır)
C# dünyasında, verileri modellemek ve sarmak için iki ana yapı kullanılır: sınıflar ve kayıtlar. Her ikisi de referans türleri olarak hizmet eder, ancak amaçlanan kullanımları, davranışları ve eşitliği ele alış biçimleri açısından önemli ölçüde farklılık gösterir. Bu kılavuz, geliştiricilerin ihtiyaçları için doğru yapıyı seçmelerine yardımcı olmak amacıyla bu farkları detaylandıracak, net örnekler ve pratik kullanımlar sunacaktır. IronPDF kütüphanesi hakkında da bilgi edineceğiz.
C#'ta Sınıflar: Temel Bilgiler
Sınıflar, C#'ta nesne yönelimli programlamanın temel taşlarından biri olmuştur ve verileri ve davranışları sarmak amacıyla tasarlanmıştır. Bunlar referans türleridir, bu da aynı değerlere sahip iki sınıf örneğinin iki ayrı nesne olarak görülmesini ifade eder. Bu ayrım, iki sınıf örneğini karşılaştırırken çok önemlidir; varsayılan karşılaştırma, değer bazlı değil, referans bazlıdır.
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ğerlere sahip olsa bile, varsayılan olarak eşit kabul edilmezler çünkü bunlar bellek içinde iki farklı referanstır.
C#'ta Kayıtlar: Değiştirilemez Veri Yapıları
C#'ta tanıtılan kayıt türü, geleneksel sınıf yapıları için güçlü bir alternatif sunarak değiştirilemez veri yapıları oluşturmayı basitleştirmek amacıyla daha yeni bir eklemelerdir. Sınıfların aksine, kayıtlar değer bazlı eşitlik semantiği sunar, bu da onları veri aktarım nesneleri veya az ya da hiç davranış içermeyen küçük veri yapıları için ideal hale getirir.
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 kısadır, gereksiz kodu azaltır. Kayıtlar otomatik olarak yıkıcı olmayan değişiklikleri ve değer bazlı karşılaştırmayı destekler. Aynı değerlere sahip iki kayıt örneği, değer semantiklerine paralel olarak eşit kabul edilir.
Uygulamalı Kullanımlar: Kayıt ve Sınıf Ne Zaman Kullanılır
C#'ta bir sınıf ve bir kayıt arasında veya diğer veri yapıları arasında tercih yapmak, modellediğiniz verilerin karmaşıklığına ve uygulamanızın gerektirdiği davranışlara bağlıdır. Sınıflar, özellikle karmaşık veri yapıları için tasarlanmıştır ve (yöntem) davranışlar eklemeyi sağlar ve gerektiğinde değiştirilebilir örneklere izin verir. Kayıtlar ise, değiştirilemez özelliklere sahip basit veri yapılarının mükemmel örnekleridir ve oluşturulduktan sonra sabit kalan veriler için ideal, değer bazlı eşitliğe sahiptir.
Veri yapınız verileri ve davranışları sarmayı gerektiriyorsa veya veriyi oluşturulduktan sonra manipüle etmeniz gerekiyorsa sınıflar idealdir. Bu esneklik, geleneksel nesne yönelimli programlama senaryolarında ve karmaşık veri yapıları oluştururken sınıfları bir başvuru kaynağı yapar.
Kayıtlar, verinin değiştirilemezliğinin kritik olduğu senaryolarda veya temel olarak veri konteyneri olarak hizmet eden basit veri yapılarıyla uğraşılırken dikkat çeker. Dahili değer bazlı eşitliği ve özlü söz dizimi, onları veri aktarım objeleri veya değer objeleri için mükemmel hale getirir.
Değer Türleri ve Referans Türleri
C#'ta değer türü ile referans türü arasındaki farkı anlamak hayati önem taşır. Sınıflar referans türleridir, bu da değişkenlerin bellek içindeki gerçek veriye bir referans tuttuğu anlamına gelir. Bu özellik, varsayılan referans bazlı eşitlik karşılaştırmasına yol açar.
Kayıtlar da referans türleri olmalarına rağmen, dahili değer bazlı eşitlikleri sayesinde değer semantiklerini taklit ederler, bu da onları karşılaştırmalarda bir dereceye kadar değer türleri gibi davranmasını sağlar.
Kod Örnekleri: Sınıflar ve Kayıtların Uygulanması
Syntax ve davranışlarındaki farkları vurgulamak için bir sınıf ve 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ık ve basitliğine dikkat edin. Kayıt, otomatik olarak yapıcı metod, özellikler ve değer bazlı eşitlik için yöntemler oluşturur.
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ında yatar:
-
Sınıflar, varsayılan olarak referans eşitliğini kullanırlar, yani iki örnek aynı bellek konumunu işaret ederse eşittir.
- Kayıtlar, varsayılan olarak değer eşitliğini kullanırlar, yani iki örneğin özellikleri aynı değerlere sahipse eşittir.
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ı özelliğe sahip iki sınıf örneği eşit kabul edilmez çünkü hafızada farklı nesnelerdir.
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ı özelliğe sahip iki kayıt örneği varsayılan olarak eşit kabul edilir.
Gelişmiş Özellikler: Kayıtlar
Kayıtlar, değişmez veri yapıları ve değer bazlı eşitlik ihtiyaçına yönelik olarak sunulan birçok gelişmiş özellikle birlikte gelir. with ifadesi, mevcut bir kayıttan bazı özellikleri değiştirilmiş yeni bir kayıt örneği oluşturmaya olanak tanır, bu da yıkıcı olmayan değişimi gösterir.
Kayıtlarla Yıkıcı Olmayan Değişim:
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şmez veri yapılarıyla çalışırken orijinal veriyi değiştirmeden bir örneği "değiştirmenin" bir yolunu sağlar.
IronPDF Kütüphanesinin Tanıtımı

IronPDF, .NET uygulamalarında PDF belgeleri oluşturmak, düzenlemek ve yönetmek için kapsamlı bir çözüm sunan .NET geliştiricilerine yönelik bir PDF kütüphanesidir. Geliştiricilerin HTML'i PDF'ye dönüştürmelerine, CSS, JavaScript ve görüntüleri PDF'lere dönüştürmelerine izin vererek 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 çeşitli .NET çerçevelerini ve proje türlerini destekler.
PDF oluşturmanın ötesinde, IronPDF, PDF'leri düzenleme, özellikleri ve güvenliği ayarlama, PDF formlarıyla çalışma ve içerik çıkarma yetenekleri sağlar. .NET projelerine PDF işlevselliği entegre etmek için güvenilir bir araç arayan geliştiricilerin ihtiyaçlarını karşılamak için tasarlanmıştır.
Kod Örneği
C#'ta IronPDF kullanarak PDF oluşturma, hem sınıflar hem de kayıtlarla gerçekleştirilebilir. Aşağıda, basit bir PDF belgesi oluşturmanın her iki yaklaşımı için örnekler bulunmaktadır. C#'ta sınıflar ve kayıtlar arasındaki temel fark, tasarladıkları kullanımdadır: sınıflar varsayılan olarak değiştirilebilir ve geleneksel nesne yönelimli programlama için tasarlanmıştır, kayıtlar ise değişmezdir ve değer tabanlı programlama için tasarlanmıştır, bu da onları veri modelleme için ideal kılar.
Bir Sınıf Kullanmak
Bu örnekte, verilen bir HTML dizgesinden PDF oluşturmak için bir metoda sahip PdfGenerator sınıfını 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 Kullanmak
Aksine, C#'ta bir kayıt ilk başlatıldıktan sonra değiştirilemezdir. İşte istenilen değişikliklerle birlikte bir kayıttan yeni bir örnek döndüren with ifadeleri kullanarak, benzer bir sonucu nasıl elde edebileceğiniz.
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, hem sınıf hem de kayıt kullanılarak C#'ta IronPDF ile bir PDF dosyası oluşturmanın nasıl yapılacağını gösterir. Bir sınıf veya kayıt kullanma seçimi, belirli ihtiyaçlarınıza bağlıdır: eğer oluşturulduktan sonra değiştirilecek nesnelere ihtiyaçınız varsa, bir sınıf daha uygun olabilir. Ancak oluşturulduktan sonra değişmemesi gereken verilerle uğraşıyorsanız ya da değişmezliğin sözdizimsel sadeliğini ve güvenliğini takdir ediyorsanız, bir kayıt daha iyi bir seçim olabilir.
Sonuç

Sonuç olarak, sınıflar değiştirilebilir durum ve referans bazlı eşitlik ile geleneksel nesne yönelimli özellikler sunarken, kayıtlar değişmez veri yapıları tanımlamak için modern bir yaklaşım sunarak değer bazlı eşitlik sağlar.
Bir sınıf veya kayıt kullanma seçimi, uygulamanızın belirli gereksinimleri ile yönlendirilmelidir, değişmezlik ihtiyaçı, veri yapısının karmaşıklığı ve tercih edilen eşitlik karşılaştırma yöntemi gibi faktörleri dikkate alarak. IronPDF'in Ücretsiz Deneme Versiyonunu Keşfedin; PDF işlevselliğini .NET uygulamalarınıza entegre etmek isteyenler için, lisanslar $799'dan başlar.
Sıkça Sorulan Sorular
C# sınıflari ve kayitlari arasindaki ana farklar nelerdir?
C# sınıflari ve kayitlari, verileri modellemek ve encapsulate etmek için kullammak uzere her ikisi de referans tipleridir, ancak esitsizlik ve değiştirilemezliği nasıl ele aldiklari konusunda farklidirlar. Sınıflar, ayni hafiza konumuna isaret ediyorsa iki örnek eşit kabul edilir, bu nedenle referans eşitliği kullanirlar. Ote yandan, kayitlar deger eşitliğini kullanir, yani özellikleri ayni degere sahipse iki örnek eşit kabul edilir ve varsayılan olarak değiştirilemez olarak tasarlanmistir.
C#'da bir sınıf ya da kayıt kullanmaya nasıl karar verebilirim?
C#'da bir sınıf veya kayıt kullanma seçimi, belirli gereksinimlerinize bağlıdır. Mutlu olasılara ihtiyaçınız varsa veya genellikle nesne yönelimli programlamada verileri ve davranışları encapsulate etmek istiyorsanız bir sınıf kullanın. Eğer yapınız basitse, değiştirilemez ve değer tabanlı eşitlik gerektiriyorsa, veri aktarım nesnelerinde olduğu gibi, bir kayıt tercih edin.
IronPDF kütüphanesi, .NET icinde PDF uretimini nasıl destekliyor?
IronPDF, .NET için sağlam bir PDF kütüphanesidir ve PDF belgelerinin oluşturulmasını, düzenlenmesini ve yönetilmesini basitleştirir. HTML, CSS, JavaScript ve görsellerin PDF'lere dönüştürulmesine olanak tanir ve çeşitli .NET çerçevelerini ve işletim sistemlerini destekler, bu da onu .NET geliştiricileri için vazgecilmez bir arac haline getirir.
PDF oluşturma projelerinde C# sınıflari ve kayitlarini birlikte kullanabilir miyim?
Evet, hem C# sınıflari hem de kayitlar PDF oluşturma projelerinde kullanilabilir. Seçim, mantiginiz için değiştirilebilir veya değiştirilemez veri yapilarina ihtiyaçiniza baglidir. Özelikle IronPDF, PDF'leri üretmek ve yönetmek için her iki yapıyla da sorunsuzca çalışabilir.
C# kayitlarinda değiştirilemezliğin rolü nedir?
Değiştirilemezlik, C# kayıtlarının temel bir özelliğidir. Bir kayıt oluşturulduğunda, özellikleri değiştirilemez ve bu, deger tabanli eşitlik semantikleriyle uyumludur. Bu tasarım, veri tutarlılığı ve butunluğunun kritik olduğu durumlarda, özelikle veri aktarım nesnelerinde idealdir.
IronPDF, .NET uygulamalari için PDF özelliklerini nasıl güçlendiriyor?
IronPDF, HTML'yi PDF'ye dönüşü, PDF düzenlemeleri ve belge güvenligi gibi özellikler sunarak .NET uygulamalarının PDF işlevselliğini artırıyor. Formlarla çalışmayı, içerik çıkarmayı ve farklı .NET ortamlarıyla sorunsuz bir şekilde entegre olabilmeyi destekleyerek PDF belge işlemlerini kolaylaştırır.
C# kayitlarinin baglaminda 'with' ifadesi nedir?
C# kayıtlarında 'with' ifadesi, tahribatsiz değişiklik için kullanılır. Geliştiricilerin mevcut bir kayıt nüshasını baz alarak, özelliklerin bazilarını değiştirerek yeni bir kayıt örneği oluşturmalarına olanak tanıyarak orijinal verinin değişmeden kalmasını sağlar.
Kayıtlar, neden veri aktarım nesneleri için uygun kabul edilir?
Kayıtlar, değer tabanlı eşitlik içeren degiştirilemez yapilarin kısa bir sözdizimini sağladıkları için veri aktarım nesneleri için uygun kabul edilir. Bu, veri butunluğunun korunduğunu ve ayni degerlere sahip örneklerin eşit olarak kabul edildigini garanti eder ki bu, veri aktarim senaryolarinda sıklıkla istenir.




