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

C# Generics (Geliştiriciler için Nasıl Çalışır)

C# generikleri, veri türlerinin bir parametre olarak belirtilebileceği sınıflar, yöntemler, arayüzler ve temsilciler tasarlamanın bir yolunu tanıtır. Genel tür parametresi olarak bilinen bu kavram, esnek ve yeniden kullanılabilir kod bileşenleri oluşturulmasını sağlar. Generikleri kullanarak, kod yeniden kullanılabilirliğini, tür güvenliğini ve performansı en üst düzeye çıkarabilirsiniz. Örneğin, genel bir sınıf bir kez tanımlanabilir ancak çeşitli veri türleriyle oluşturulabilir, böylece esneklik ve tür bütünlüğü sağlar. Bu makalede, C# Genelikleri'nin temellerini ve IronPDF kütüphanesi özellikleri ile PDF manipülasyonu öğreneceğiz.

Genel Sınıfların Temelleri

C#'ta genel bir sınıf, içerdiği veya üzerinde çalıştığı tür için bir yer tutucu ile bir sınıf oluşturmak için bir taslaktır. Bu yer tutucu genellikle T olarak anılır ve sınıf oluşturulduğunda belirtilen bir tür parametresini temsil eder. Farklı veri türlerini işlemek için T tür parametresi ile genel sınıflar oluşturabiliriz. Genel sınıflar, listeler, kuyruklar ve karma tablolar gibi koleksiyon sınıfları için özellikle faydalıdır, çünkü herhangi bir veri türünü barındırabilirken tür güvenliğini sağlar ve dönüştürme ihtiyaçını azaltır.

Basit Bir Genel Sınıf Örneği

Herhangi bir türde bir değer depolamak için tasarlanmış Box adlı bir genel sınıf düşünün:

public class Box<t>
{
    private T data;

    public Box(T data)
    {
        this.data = data;
    }

    public T Data
    {
        get { return data; }
    }
}
public class Box<t>
{
    private T data;

    public Box(T data)
    {
        this.data = data;
    }

    public T Data
    {
        get { return data; }
    }
}
Public Class Box(Of T)
    Private data As T

    Public Sub New(data As T)
        Me.data = data
    End Sub

    Public ReadOnly Property Data As T
        Get
            Return data
        End Get
    End Property
End Class
$vbLabelText   $csharpLabel

Bu sınıfı kullanmak için, T için gerçek türü belirterek bir örnek oluşturursunuz:

Box<int> integerBox = new Box<int>(123);
Box<string> stringBox = new Box<string>("Hello");
Box<int> integerBox = new Box<int>(123);
Box<string> stringBox = new Box<string>("Hello");
Dim integerBox As New Box(Of Integer)(123)
Dim stringBox As New Box(Of String)("Hello")
$vbLabelText   $csharpLabel

Bu kod, bir sınıfın (Box) farklı veri türlerini (int, string) depolamak için nasıl uyarlanabileceğini, kodun yeniden kullanılabilirliğini ve tür güvenliğini sağlamak için genel tiplerin gücünü sergiliyor.

Genel Yöntemlerin Uygulanması

Genel yöntemler, genel sınıflara benzerdir ancak tür parametreleri yöntem düzeyinde tanımlanmıştır. Bu, farklı türler üzerinde çalışabilen yöntemler oluşturmayı mümkün kılar, hem genel bir sınıfta hem de genel olmayan bir sınıfta tanımlanabilir.

Genel Yöntem Örneği

İşte herhangi bir türdeki bir dizide iki öğeyi değiştiren bir yöntem:

public class Utility
{
    // Swaps two elements by reference using generics
    public static void Swap<t>(ref T lhs, ref T rhs)
    {
        T temp = lhs; // Store lhs in a temporary variable
        lhs = rhs;    // Assign rhs to lhs
        rhs = temp;   // Assign temp (original lhs) to rhs
    }
}
public class Utility
{
    // Swaps two elements by reference using generics
    public static void Swap<t>(ref T lhs, ref T rhs)
    {
        T temp = lhs; // Store lhs in a temporary variable
        lhs = rhs;    // Assign rhs to lhs
        rhs = temp;   // Assign temp (original lhs) to rhs
    }
}
Public Class Utility
    ' Swaps two elements by reference using generics
    Public Shared Sub Swap(Of T)(ByRef lhs As T, ByRef rhs As T)
        Dim temp As T = lhs ' Store lhs in a temporary variable
        lhs = rhs ' Assign rhs to lhs
        rhs = temp ' Assign temp (original lhs) to rhs
    End Sub
End Class
$vbLabelText   $csharpLabel

Yukarıdaki yöntemin kullanımı şu şekilde olabilir:

int a = 1, b = 2;
Utility.Swap<int>(ref a, ref b);

string first = "world", second = "hello";
Utility.Swap(ref first, ref second);
int a = 1, b = 2;
Utility.Swap<int>(ref a, ref b);

string first = "world", second = "hello";
Utility.Swap(ref first, ref second);
Dim a As Integer = 1, b As Integer = 2
Utility.Swap(Of Integer)(a, b)

Dim first As String = "world", second As String = "hello"
Utility.Swap(first, second)
$vbLabelText   $csharpLabel

Genel Arayüzler ve Temsilcileri Keşfetme

Genel arayüzler ve temsilciler, herhangi bir türle çalışabilen kontratlar ve geri çağrı yöntemleri tanımlamayı sağlar. Sınıfınızda veya yönteminizde genel bir arayüz uygulamak veya genel bir temsilci kullanmak esnekliği ve kodun yeniden kullanılabilirliğini artırır.

Genel Arayüz Örneği

Veri erişim işlemleri için genel bir depo arayüzü şöyle görünebilir:

public interface IRepository<t>
{
    void Add(T item);
    T GetById(int id);
    IEnumerable<t> GetAll();
}
public interface IRepository<t>
{
    void Add(T item);
    T GetById(int id);
    IEnumerable<t> GetAll();
}
Public Interface IRepository(Of T)
    Sub Add(item As T)
    Function GetById(id As Integer) As T
    Function GetAll() As IEnumerable(Of T)
End Interface
$vbLabelText   $csharpLabel

Bu arayüz, belirli veri türlerini işlemek için herhangi bir sınıf tarafından uygulanabilir, böylece farklı türler arasında tutarlı veri erişim modelleri sağlar.

Genel Temsilci Örneği

Tür güvenliği sağlamak için bir geri çağrı tanımlamak adına genel bir temsilci kullanılabilir:

public delegate void Action<t>(T item);
public delegate void Action<t>(T item);
Public Delegate Sub Action(Of T)(item As T)
$vbLabelText   $csharpLabel

Genel Koleksiyonları Kullanma

Generic koleksiyon sınıfları, List, Dictionary<TKey, TValue> gibi ve System.Collections.Generic ad alanındaki diğerleri, belirli bir türde verilerin depolanması ve işlenmesi için tür güvenli, verimli koleksiyonlar sunar. Bu koleksiyonlar, dönüştürme ihtiyaçını ortadan kaldırır ve çalışma zamanı hatalarını azaltır, bu nedenle genel olmayan muadillerine göre üstündür.

List<string> names = new List<string>();
names.Add("Alice");
names.Add("Bob");

Dictionary<int, string> keyValuePairs = new Dictionary<int, string>();
keyValuePairs.Add(1, "One");
keyValuePairs.Add(2, "Two");
List<string> names = new List<string>();
names.Add("Alice");
names.Add("Bob");

Dictionary<int, string> keyValuePairs = new Dictionary<int, string>();
keyValuePairs.Add(1, "One");
keyValuePairs.Add(2, "Two");
Dim names As New List(Of String)()
names.Add("Alice")
names.Add("Bob")

Dim keyValuePairs As New Dictionary(Of Integer, String)()
keyValuePairs.Add(1, "One")
keyValuePairs.Add(2, "Two")
$vbLabelText   $csharpLabel

Özel Genel Türler Oluşturma

Yerleşik genel türlerin ötesinde, farklı veri türleri arasında yaygın olan ancak tür spesifik bir şekilde ele alınması gereken işlemleri kapsayacak kendi türlerinizi oluşturabilirsiniz. Bu yaklaşım, kütüphaneler, çerçeveler veya çeşitli veri türleriyle kullanılacak araçlar oluşturmak için özellikle kullanışlıdır.

Özel Genel Tür Örneği

Başarı durumu ve isteğe bağlı bir mesajla operasyon sonuçlarını kapsülleyen genel bir Result sınıfını düşünün:

public class Result<t>
{
    public bool Success { get; private set; }
    public T Data { get; private set; }
    public string Message { get; private set; }

    public Result(bool success, T data, string message = "")
    {
        Success = success;
        Data = data;
        Message = message;
    }
}
public class Result<t>
{
    public bool Success { get; private set; }
    public T Data { get; private set; }
    public string Message { get; private set; }

    public Result(bool success, T data, string message = "")
    {
        Success = success;
        Data = data;
        Message = message;
    }
}
Public Class Result(Of T)
    Public ReadOnly Property Success As Boolean
    Public ReadOnly Property Data As T
    Public ReadOnly Property Message As String

    Public Sub New(success As Boolean, data As T, Optional message As String = "")
        Me.Success = success
        Me.Data = data
        Me.Message = message
    End Sub
End Class
$vbLabelText   $csharpLabel

IronPDF: C# PDF Kütüphanesi

IronPDF .NET geliştiricileri için uygulamaları içinde PDF belgeler oluşturmak, düzenlemek ve çıkarmak için tasarlanmış kapsamlı bir kütüphanedir. IronPDF, HTML'den PDF oluşturma, mevcut PDF'leri düzenleme, PDF'leri görüntülere dönüştürme ve daha birçok konuda yardımcı olur. IronPDF'in kendisi genellere dayanmamış olsa da, bir C# ortamında bu kütüphane ile nasıl etkileşim kurulacağını anlamak, uygulamanızın belge yönetim yeteneklerini büyük ölçüde artırabilir.

IronPDF ile Sanal Anahtar Kullanımına Ait Kod Örneği

Buradaki generiklerin kullanılmasının arkasındaki düşünce, belirtilen herhangi bir HTML dizesinden bir PDF oluşturabilecek yeniden kullanılabilir bir yöntem yaratmaktır. Bu yöntem, gerektiğinde farklı türdeki meta verileri veya yapılandırmaları belirtmemizi sağlayarak genel olacak.

İlk olarak, PDF oluşturma seçeneklerimizi tutacak basit bir genel sınıf tanımlayalım. Gösterim amacıyla, bu sınıf basit olacak, ancak ihtiyaçlarınıza uygun daha fazla özellik ekleyebilirsiniz.

public class PdfOptions<t>
{
    public T Metadata { get; set; }
    public string HtmlContent { get; set; }
}
public class PdfOptions<t>
{
    public T Metadata { get; set; }
    public string HtmlContent { get; set; }
}
Public Class PdfOptions(Of T)
    Public Property Metadata As T
    Public Property HtmlContent As String
End Class
$vbLabelText   $csharpLabel

Şimdi IronPDF kullanarak PDF oluşturan statik bir metot yaratalım ve PdfOptions sınıfımızdan faydalanalım. Bu metot, PdfOptions örneğini parametre olarak alacak ve genel tiplerin kullanımını uygulamalı olarak gösterecek.

using IronPdf; // Make sure to include the necessary namespace for IronPDF

public static class PdfGenerator
{
    // Generates a PDF from provided HTML content and options
    public static void GeneratePdf<t>(PdfOptions<t> options)
    {
        // Initialize the IronPDF HtmlToPdf renderer
        var renderer = new ChromePdfRenderer();

        // Optional: Apply any renderer options here, for example, setting the paper size
        renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A4;

        // Generate the PDF from HTML content
        var pdfDocument = renderer.RenderHtmlAsPdf(options.HtmlContent);

        // Optional: Here, you can use options.Metadata in some way, depending on your generic type T
        // For simplicity, we're just printing the metadata to console if it's of type string
        if (options.Metadata is string metadataString)
        {
            Console.WriteLine($"Metadata: {metadataString}");
        }

        // Save the PDF to a file
        var fileName = $"GeneratedPdf_{DateTime.Now.Ticks}.pdf";
        pdfDocument.SaveAs(fileName);
        Console.WriteLine($"PDF generated and saved as {fileName}");
    }
}
using IronPdf; // Make sure to include the necessary namespace for IronPDF

public static class PdfGenerator
{
    // Generates a PDF from provided HTML content and options
    public static void GeneratePdf<t>(PdfOptions<t> options)
    {
        // Initialize the IronPDF HtmlToPdf renderer
        var renderer = new ChromePdfRenderer();

        // Optional: Apply any renderer options here, for example, setting the paper size
        renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A4;

        // Generate the PDF from HTML content
        var pdfDocument = renderer.RenderHtmlAsPdf(options.HtmlContent);

        // Optional: Here, you can use options.Metadata in some way, depending on your generic type T
        // For simplicity, we're just printing the metadata to console if it's of type string
        if (options.Metadata is string metadataString)
        {
            Console.WriteLine($"Metadata: {metadataString}");
        }

        // Save the PDF to a file
        var fileName = $"GeneratedPdf_{DateTime.Now.Ticks}.pdf";
        pdfDocument.SaveAs(fileName);
        Console.WriteLine($"PDF generated and saved as {fileName}");
    }
}
Imports IronPdf ' Make sure to include the necessary namespace for IronPDF

Public Module PdfGenerator
    ' Generates a PDF from provided HTML content and options
    Public Sub GeneratePdf(Of T)(options As PdfOptions(Of T))
        ' Initialize the IronPDF HtmlToPdf renderer
        Dim renderer As New ChromePdfRenderer()

        ' Optional: Apply any renderer options here, for example, setting the paper size
        renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A4

        ' Generate the PDF from HTML content
        Dim pdfDocument = renderer.RenderHtmlAsPdf(options.HtmlContent)

        ' Optional: Here, you can use options.Metadata in some way, depending on your generic type T
        ' For simplicity, we're just printing the metadata to console if it's of type string
        If TypeOf options.Metadata Is String Then
            Dim metadataString As String = CType(options.Metadata, String)
            Console.WriteLine($"Metadata: {metadataString}")
        End If

        ' Save the PDF to a file
        Dim fileName As String = $"GeneratedPdf_{DateTime.Now.Ticks}.pdf"
        pdfDocument.SaveAs(fileName)
        Console.WriteLine($"PDF generated and saved as {fileName}")
    End Sub
End Module
$vbLabelText   $csharpLabel

Son olarak, PdfGenerator sınıfımızı kullanarak bir PDF belgesi oluşturalım. Bu örnekte, Meta veriler özelliği, başlık veya ilgili bulabileceğiniz herhangi bir bilgiyi içeren bir dize olabilir.

class Program
{
    static void Main(string[] args)
    {
        // Set the license key for IronPDF if needed
        License.LicenseKey = "Your-License-Key-Here";

        // Create PDF options with HTML content and metadata
        var options = new PdfOptions<string>
        {
            HtmlContent = "<h1>Hello, World!</h1><p>This is a test PDF document generated from HTML.</p>",
            Metadata = "Test PDF Title"
        };

        // Generate the PDF using the specified options
        PdfGenerator.GeneratePdf(options);
    }
}
class Program
{
    static void Main(string[] args)
    {
        // Set the license key for IronPDF if needed
        License.LicenseKey = "Your-License-Key-Here";

        // Create PDF options with HTML content and metadata
        var options = new PdfOptions<string>
        {
            HtmlContent = "<h1>Hello, World!</h1><p>This is a test PDF document generated from HTML.</p>",
            Metadata = "Test PDF Title"
        };

        // Generate the PDF using the specified options
        PdfGenerator.GeneratePdf(options);
    }
}
Friend Class Program
	Shared Sub Main(ByVal args() As String)
		' Set the license key for IronPDF if needed
		License.LicenseKey = "Your-License-Key-Here"

		' Create PDF options with HTML content and metadata
		Dim options = New PdfOptions(Of String) With {
			.HtmlContent = "<h1>Hello, World!</h1><p>This is a test PDF document generated from HTML.</p>",
			.Metadata = "Test PDF Title"
		}

		' Generate the PDF using the specified options
		PdfGenerator.GeneratePdf(options)
	End Sub
End Class
$vbLabelText   $csharpLabel

Bu örnek, IronPDF'in C# Generic'lerle entegrasyonunun temel unsurlarını gösterir, HTML içeriğinden PDF oluşturmanın esnek bir yolunu sunarken, generic PdfOptions sınıfı aracılığıyla özelleştirilebilir metaveriler veya yapılandırmalara izin verir. Bu durumu, uygulamanız için gereken daha karmaşık seçenekler ve görselleştirici yapılandırmaları ekleyerek genişletebilirsiniz.

C# Generics (Geliştiriciler İçin Nasıl Çalışır): Şekil 1 - IronPDF kullanarak HTML dizesinden PDF dokümanı oluşturmak için generics kullanan örnek kod çıktısıCsharp Generics 1 related to IronPDF ile Sanal Anahtar Kullanımına Ait Kod Örneği

Sonuç

C# Generics (Geliştiriciler İçin Nasıl Çalışır): Şekil 2 - IronPDF lisanslama sayfasıCsharp Generics 2 related to Sonuç

C# generics, yüksek kaliteli, yeniden kullanılabilir ve tür güvenli kod geliştirmek için güçlü bir araçtır. Genel sınıfları, yöntemleri, arayüzleri ve delege yöntemlerini anlayarak ve uygulayarak daha esnek ve kolay bakım yapılabilir kod yazabilirsiniz. Genel yapılar, farklı veri türleri arasında kodun yeniden kullanımını mümkün kılmakla kalmaz, aynı zamanda derleme zamanı tür kontrolü sağladığından çalışma zamanı hatalarını azaltır ve genel kod kalitesini artırır. IronPDF, PDF kütüphane araçlarının ücretsiz denemesini sunar ve maliyetler $799'dan itibaren başlar.

Sıkça Sorulan Sorular

C#'ta tür genellemeler nedir?

C# tür genellemeleri, sınıfları, yöntemleri, arabirimleri ve delegeyi bir tür parametresiyle tasarlama yolu sunar. Bu, tür güvenliği ve performans iyileştirmeleri sağlayan esnek ve yeniden kullanılabilir kod bileşenleri oluşturmayı mümkün kılar.

C#'ta genellemeli sınıflar nasıl çalışır?

C#'ta bir genellemeli sınıf, sıklıkla T olarak işaretlenen bir tür parametresi kullanır, bu parametre sahip olduğu veya üzerinde çalıştığı tür için bir yer tutucu görevi görür. Bu, sınıfın tür güvenliğini koruyarak çeşitli veri türleriyle oluşturulmasına olanak tanır.

C#'ta genellemeli bir sınıf örneği verebilir misiniz?

Evet, basit bir örnek, herhangi bir türden bir değeri depolayan Box sınıfıdır. Box veya Box gibi örnekler oluşturarak aynı sınıfı kullanarak farklı veri türlerini depolayabilirsiniz.

C#'ta genellemeli bir yöntem nedir?

Genellemeli bir yöntem, yöntemin seviyesinde tür parametreleriyle tanımlanır ve farklı türlerde çalışmasını sağlar. Bu, bir genellemeli sınıfın veya genellemeli olmayan bir sınıfın parçası olabilir ve yöntem tasarımında esneklik sağlar.

C#'ta genellemeli arabirimler ve delege nasıl kullanılabilir?

Genellemeli arabirimler ve delege, herhangi bir türle çalışabilecek sözleşmeler ve callback yöntemleri tanımlamalarına olanak tanır, bu da esnekliği artırır ve kodun yeniden kullanılabilirliğini sağlar.

C#'ta genellemeli koleksiyonların faydaları nelerdir?

Genel koleksiyonlar, List ve Dictionary gibi, herhangi bir özel tür için tür güvenli ve verimli depolama sağlar, bu da dönüştürme ihtiyaçını ortadan kaldırır ve çalışma zamanı hatalarını azaltır.

C#'ta özelleştirilebilir genellemeli türler nasıl oluşturabilirim?

Veri türleri arasında ortak ancak tür özel şekilde ele alınan işlemleri kapsüllemek için özelleştirilmiş genellemeli türler oluşturabilirsiniz, bu kütüphaneler veya işletim araçları oluşturmak için faydalı olabilir.

C# tür genellemeleri, .NET'te PDF oluşturmayı nasıl iyileştirebilir?

C# genellikleri, PDF kütüphanesi ile esnek ve yeniden kullanılabilir bileşenler oluşturmak için kullanılabilir. Örneğin, bir PdfOptions sınıfı, PDF oluşturma seçeneklerini tutmak için kullanılabilir ve bu, genelliklerin PDF görevleriyle nasıl uyum sağladığını gösterir.

Bir PDF kütüphanesi, C# genellemeleriyle nasıl kullanılabilir?

IronPDF gibi bir PDF kütüphanesi, işlevselliğini artırmak için C# tür genellemeleri kullanabilir. Örneğin, HTML'yi PDF'ye dönüştürmek için genellemeli bir yöntem kullanılabilir, bu da belge oluşturmak için esnek bir yaklaşım sağlar.

C# tür genellemelerinin avantajları nelerdir?

C# tür genellemeleri, farklı veri türleri arasında kodun yeniden kullanılabilirliğini sağlar, derleme zamanında tür kontrolü sağlar, çalışma zamanı hatalarını azaltır ve genel kod kalitesini iyileştirir. Uyarlanabilir ve sürdürülebilir kod yazmayı mümkün kılar.

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