C# Delegates (Geliştiriciler için Nasıl Çalışır)
C# programlamada, yeni yönlendirilebilir ve genişletilebilir kod yazabilmek için delegeyi anlamanın önemi büyüktür. Delegeler, dil içinde geri arama, olay işleme ve fonksiyonel programlama yaklaşımlarını uygulama kolaylığı sağlayan güçlü unsurlar olarak hizmet eder. Microsoft'un delege kılavuzu, C# uygulamalarında kullanılacak Delegate örneklerine yönelik kapsamlı bir bakış sunar.
Bu kapsamlı kılavuzda, C# delegelerinin karmaşıklıklarına derinlemesine bir keşif yapacağız, işlevselliklerini, kullanım senaryolarını ve programcıların daha modüler ve ölçeklenebilir kod yazmalarına nasıl olanak sağladığını inceleyeceğiz.
C# Temsilcileri Anlamak: Geri Çağrıların Omurgası
Temelinde, C#'ta bir delege, bir fonksiyon işaretçisi olarak da ifade edilen ve bir veya daha fazla metodu kapsayan tür güvenli bir nesnedir. Delegeler, fonksiyonlara referanslar oluşturma, bunları parametre olarak geçirme, veri yapılarında depolama ve dinamik olarak çağırma yolları sağlar. Bu, delegeleri geri arama mekanizmalarını gerçekleştirmek ve olay odaklı mimarileri uygulamak için vazgeçilmez bir temel yapar.
C# Temsilcilerinin Temel Özellikleri
- Tür Güvenliği: Delegeler tür güvenliğidir ve referans verdikleri metodun imzasının, delegenin imzasına uygun olmasını sağlar.
- Çoklu Yayın: Delegeler çoklu yayını destekler ve bu sayede birçok metodun tek bir delege örneği içinde birleştirilmesine izin verir. Çağrıldığında, çoklu yayın delegesi içindeki tüm metodlar sırayla çağrılır.
- Anonim Metodlar ve Lambda İfadeleri: C# delegeleri, anonim metodlar ve lambda ifadeleri ile sorunsuz bir şekilde entegre olur, metot tanımlarını satır içinde tanımlamak için özlü bir sözdizimi sağlar.
Temel Kullanımı ve Sözdizimi
Delegelerin kullanımı için temel adımlar, delege türü ve parametreleri ile bildirim, örnekleme ve geri arama metotlarını tanımlayarak çağrının yapılmasını içerir. İşte temel bir örnek:
// Delegate declaration
public delegate void MyDelegate(string message);
class Program
{
static void Main(string[] args)
{
// Instantiation
MyDelegate myDelegate = DisplayMessage;
// Invocation
myDelegate("Hello, Delegates!");
}
// Method to be referenced
static void DisplayMessage(string message)
{
Console.WriteLine(message);
}
}
// Delegate declaration
public delegate void MyDelegate(string message);
class Program
{
static void Main(string[] args)
{
// Instantiation
MyDelegate myDelegate = DisplayMessage;
// Invocation
myDelegate("Hello, Delegates!");
}
// Method to be referenced
static void DisplayMessage(string message)
{
Console.WriteLine(message);
}
}
' Delegate declaration
Public Delegate Sub MyDelegate(ByVal message As String)
Friend Class Program
Shared Sub Main(ByVal args() As String)
' Instantiation
Dim myDelegate As MyDelegate = AddressOf DisplayMessage
' Invocation
myDelegate("Hello, Delegates!")
End Sub
' Method to be referenced
Private Shared Sub DisplayMessage(ByVal message As String)
Console.WriteLine(message)
End Sub
End Class
Geri Arama Senaryoları: Esneklik İçin Delegelerden Yararlanma
Delegelerin ana kullanım senaryolarından biri geri aramalar uygulamaktır. Belirli bir olay meydana geldiğinde bir metodun dış bir bileşeni bilgilendirmesi gereken durumları düşünün. Delegeler, temiz ve modüler bir çözüm sunar:
using System;
class Program
{
static void Main(string[] args)
{
EventPublisher publisher = new EventPublisher();
EventSubscriber subscriber = new EventSubscriber(publisher);
publisher.SimulateEvent("Test Event");
}
}
public class EventPublisher
{
// Declare a delegate type
public delegate void EventHandler(string eventName);
// Create an instance of the delegate
public event EventHandler EventOccurred;
// Simulate an event
public void SimulateEvent(string eventName)
{
// Invoke the delegate to notify subscribers
EventOccurred?.Invoke(eventName);
}
}
public class EventSubscriber
{
public EventSubscriber(EventPublisher eventPublisher)
{
// Subscribe to the event using the delegate
eventPublisher.EventOccurred += HandleEvent;
}
// Method to be invoked when the event occurs
private void HandleEvent(string eventName)
{
Console.WriteLine($"Event handled: {eventName}");
}
}
using System;
class Program
{
static void Main(string[] args)
{
EventPublisher publisher = new EventPublisher();
EventSubscriber subscriber = new EventSubscriber(publisher);
publisher.SimulateEvent("Test Event");
}
}
public class EventPublisher
{
// Declare a delegate type
public delegate void EventHandler(string eventName);
// Create an instance of the delegate
public event EventHandler EventOccurred;
// Simulate an event
public void SimulateEvent(string eventName)
{
// Invoke the delegate to notify subscribers
EventOccurred?.Invoke(eventName);
}
}
public class EventSubscriber
{
public EventSubscriber(EventPublisher eventPublisher)
{
// Subscribe to the event using the delegate
eventPublisher.EventOccurred += HandleEvent;
}
// Method to be invoked when the event occurs
private void HandleEvent(string eventName)
{
Console.WriteLine($"Event handled: {eventName}");
}
}
Imports System
Friend Class Program
Shared Sub Main(ByVal args() As String)
Dim publisher As New EventPublisher()
Dim subscriber As New EventSubscriber(publisher)
publisher.SimulateEvent("Test Event")
End Sub
End Class
Public Class EventPublisher
' Declare a delegate type
Public Delegate Sub EventHandler(ByVal eventName As String)
' Create an instance of the delegate
Public Event EventOccurred As EventHandler
' Simulate an event
Public Sub SimulateEvent(ByVal eventName As String)
' Invoke the delegate to notify subscribers
RaiseEvent EventOccurred(eventName)
End Sub
End Class
Public Class EventSubscriber
Public Sub New(ByVal eventPublisher As EventPublisher)
' Subscribe to the event using the delegate
AddHandler eventPublisher.EventOccurred, AddressOf HandleEvent
End Sub
' Method to be invoked when the event occurs
Private Sub HandleEvent(ByVal eventName As String)
Console.WriteLine($"Event handled: {eventName}")
End Sub
End Class
Fonksiyonel Programlama ile Delegeler
Delegeler, C#'ta fonksiyonel programlama kavramlarını benimsemede önemli bir rol oynar. Yüksek dereceli fonksiyonlarla delegeler kullanarak, geliştiriciler fonksiyonları argümanlar olarak geçirebilir, fonksiyonları döndürebilir ve daha özlü ve ifade edici kodlar oluşturabilirler:
public delegate int MyDelegate(int x, int y);
public class Calculator
{
public int PerformOperation(MyDelegate operation, int operand1, int operand2)
{
// Execute the operation method reference through the passed delegate
return operation(operand1, operand2);
}
}
// Usage
var calculator = new Calculator();
int result = calculator.PerformOperation((x, y) => x + y, 5, 3); // Adds 5 and 3
Console.WriteLine(result); // Outputs: 8
public delegate int MyDelegate(int x, int y);
public class Calculator
{
public int PerformOperation(MyDelegate operation, int operand1, int operand2)
{
// Execute the operation method reference through the passed delegate
return operation(operand1, operand2);
}
}
// Usage
var calculator = new Calculator();
int result = calculator.PerformOperation((x, y) => x + y, 5, 3); // Adds 5 and 3
Console.WriteLine(result); // Outputs: 8
Public Delegate Function MyDelegate(ByVal x As Integer, ByVal y As Integer) As Integer
Public Class Calculator
Public Function PerformOperation(ByVal operation As MyDelegate, ByVal operand1 As Integer, ByVal operand2 As Integer) As Integer
' Execute the operation method reference through the passed delegate
Return operation(operand1, operand2)
End Function
End Class
' Usage
Private calculator = New Calculator()
Private result As Integer = calculator.PerformOperation(Function(x, y) x + y, 5, 3) ' Adds 5 and 3
Console.WriteLine(result) ' Outputs: 8
IronPDF'ü Tanıma: Kısa Bir Genel Bakış

IronPDF'in özellikleri hakkında daha fazla bilgi edinin ve bu özellik zengin kütüphanenin, C# uygulamalarında PDF oluşturma, düzenleme ve etkileşim olanağı sağladığını keşfedin. Sıfırdan PDF oluşturma, HTML'yi PDF'ye dönüştürme veya mevcut PDF'lerden içerik çıkarma gereksiniminiz olsun, IronPDF bu görevleri kolaylaştırmak için kapsamlı bir araç seti sunar. Çok yönlülüğü, çeşitli projeler üzerinde çalışan geliştiriciler için değerli bir varlık haline getirir.
IronPDF Kurulumu: Hızlı Başlangıç
C# projenizde IronPDF kütüphanesini kullanmaya başlamak için IronPDF NuGet paketini kolayca yükleyebilirsiniz. Paket Yöneticisi Konsolunuzda aşağıdaki komutu kullanın:
Install-Package IronPdf
Alternatif olarak, NuGet Paket Yöneticisi'nde "IronPDF" arayabilir ve buradan yükleyebilirsiniz.

C#'da Temsilciler: Hızlı Bir Özete
C#'ta, delegeler tür güvenli fonksiyon işaretçileri olarak hizmet eder ve metodların referans verilmesine ve parametre olarak geçirilmesine olanak tanır. Delegeler yukarıda belirtildiği gibi farklı senaryolarda önemli bir rol oynar. Şimdi, soru şu: C# delegeleri IronPDF ortamına nasıl uyum sağlar ve bunları birlikte etkili bir şekilde kullanabilir miyiz?
Delegelerin IronPDF ile Entegrasyonu
1. Belge Olayları İçin Geri Arama Yöntemleri Kullanma
IronPDF ile delegeleri kullanmanın bir yolu, belge olayları için geri arama yöntemleri aracılığıyla olabilir. IronPDF, delegelerle abone olabileceğiniz olaylar sunar, böylece belge oluşturma sürecinin belirli noktalarında özel mantıkları çalıştırabilirsiniz. Örneğin:
using IronPdf;
public delegate string AddPasswordEventHandler(PdfDocument e);
string AddPassword(PdfDocument document)
{
string password = "";
if (document.Password == "")
{
password = "Iron123";
}
return password;
}
PdfDocument document = new PdfDocument("StyledDocument.pdf");
AddPasswordEventHandler handler = AddPassword;
document.Password = handler.Invoke(document); // Subscribe to the event
document.SaveAs("PasswordProtected.pdf");
using IronPdf;
public delegate string AddPasswordEventHandler(PdfDocument e);
string AddPassword(PdfDocument document)
{
string password = "";
if (document.Password == "")
{
password = "Iron123";
}
return password;
}
PdfDocument document = new PdfDocument("StyledDocument.pdf");
AddPasswordEventHandler handler = AddPassword;
document.Password = handler.Invoke(document); // Subscribe to the event
document.SaveAs("PasswordProtected.pdf");
Imports IronPdf
Public Delegate Function AddPasswordEventHandler(ByVal e As PdfDocument) As String
Private Function AddPassword(ByVal document As PdfDocument) As String
Dim password As String = ""
If document.Password = "" Then
password = "Iron123"
End If
Return password
End Function
Private document As New PdfDocument("StyledDocument.pdf")
Private handler As AddPasswordEventHandler = AddressOf AddPassword
document.Password = handler.Invoke(document) ' Subscribe to the event
document.SaveAs("PasswordProtected.pdf")
Bu C# kod parçasında, bir PdfDocument parametre olarak kabul eden ve bir dize döndüren AddPassword adlı bir yöntem tanımlanır. Bu yöntem içinde, password adlı bir dize değişkeni başlatılır ve sağlanan PdfDocument'un Password özelliği üzerinde bir koşullu kontrol gerçekleştirilir. Şifre boş bir dize ise, password değişkenine "Iron123" değerini atayın ve geri döndürün.
Sonraki adımda, "StyledDocument.pdf" dosya adıyla bir PdfDocument örneği oluşturulur. AddPassword yönteminin aynısına sahip bir imza ile AddPasswordEventHandler adlı bir delege ilan edilir. Bu delegasyonun handler adlı örneği AddPassword yöntemine atanır. document örneği ile Invoke yöntemini geçerek delege çağrılır ve döndürülen şifre document'un Password özelliğine atanır.
Son olarak, document üzerinde SaveAs yöntemi çağrılır ve "PasswordProtected.pdf" olarak kaydedilir. Kod, bir PdfDocument için AddPassword içinde belirli koşullara göre dinamik olarak bir şifre belirlemek ve ayarlamak için etkili bir şekilde bir delege kullanır.
2. Dinamik İçerik için Delegeleri Kullanma
Delegeler aynı zamanda PDF belgesine dinamik içerik enjekte etmek için de kullanılabilir. IronPDF, HTML içeriğinin HTML'den PDF oluşturma destekler, ve geliştiriciler, belirli koşullar veya verilere dayalı olarak dinamik olarak HTML üretebilirler:
// Assuming GetDynamicContent is a delegate that generates dynamic HTML content
Func<string> getDynamicContent = () =>
{
// Custom logic to generate dynamic content
return "<p>This is dynamic content based on some condition.</p>";
};
// Incorporate dynamic HTML into the PDF
var pdfRenderer = new ChromePdfRenderer();
var pdfDocument = pdfRenderer.RenderHtmlAsPdf($"<html><body>{getDynamicContent()}</body></html>");
pdfDocument.SaveAs("DynamicContentDocument.pdf");
// Assuming GetDynamicContent is a delegate that generates dynamic HTML content
Func<string> getDynamicContent = () =>
{
// Custom logic to generate dynamic content
return "<p>This is dynamic content based on some condition.</p>";
};
// Incorporate dynamic HTML into the PDF
var pdfRenderer = new ChromePdfRenderer();
var pdfDocument = pdfRenderer.RenderHtmlAsPdf($"<html><body>{getDynamicContent()}</body></html>");
pdfDocument.SaveAs("DynamicContentDocument.pdf");
' Assuming GetDynamicContent is a delegate that generates dynamic HTML content
Dim getDynamicContent As Func(Of String) = Function()
' Custom logic to generate dynamic content
Return "<p>This is dynamic content based on some condition.</p>"
End Function
' Incorporate dynamic HTML into the PDF
Dim pdfRenderer = New ChromePdfRenderer()
Dim pdfDocument = pdfRenderer.RenderHtmlAsPdf($"<html><body>{getDynamicContent()}</body></html>")
pdfDocument.SaveAs("DynamicContentDocument.pdf")
Bu örnekte, getDynamicContent delegesi, dinamik olarak HTML içeriği üretir ve bu içerik daha sonra PDF belgesine gömülür.

IronPDF'i verimli ve etkili kullanmak için, lütfen IronPDF dökümantasyonunu ziyaret edin.
Sonuç
Sonuç olarak, C# delegeleri, kod esnekliği ve modülerliğinin belkemiğidir. Geri çağrılar uygulamaya, olayları ele almaya ve functional programlama yaklaşımlarını benimsemeye olanak tanırlar, örneğin metod çağrılarını programatik olarak değiştirme yeteneği. C# araç setinde çok yönlü bir araç olarak, delegeler geliştiricilere daha bakımı kolay, ölçeklenebilir ve ifade edici kodlar oluşturmada yetki sağlar. İster olay odaklı uygulamalar inşa ediyor, ister geri arama mekanizmalarını uyguluyor, ister işlevsel programlamayı keşfediyor olun, C# delegeleri, programlama yolculuğunuzda güçlü bir müttefiktir.
C# delegeleri ve IronPDF, uygulamalarınızdaki belge oluşturma olanaklarını geliştiren işbirlikçi bir çift oluşturabilir. İster belge olaylarını özelleştiriyor, ister dinamik içerik enjekte ediyor olun, delegeler IronPDF'in işlevselliğini genişletmek için esnek bir mekanizma sağlar. Olasılıkları keşfederken, projenizin belirli gereksinimlerini dikkate alın ve delegelerin IronPDF ile daha kişiselleştirilmiş ve dinamik bir PDF oluşturma sürecine nasıl katkıda bulunabileceğini düşünün.
IronPDF, tam işlevselliğini denemek için bir ücretsiz deneme sunar. Ticari kullanım için lisanslanabilir ve $999 ile başlayabilir.
Sıkça Sorulan Sorular
C# delegeleri nelerdir ve neden önemlidirler?
C# delegeleri, metoda güvenli işaretçiler olarak, metodların parametre olarak geçirilmesine ve dinamik olarak çağrılmasına izin verirler. Olay işleme, geri çağırmalar ve fonksiyonel programlama paradigmalarını etkinleştirerek esnek, modüler ve ölçeklenebilir kod yazmak için çok önemlidirler.
C#’ta PDF oluşturma için delegeler nasıl kullanılabilir?
Delegeler, belge olayları için geri çağırmaları etkinleştirerek ve PDF'lere dinamik içerikler enjekte ederek PDF oluşturmayı iyileştirebilir. Örneğin, delegeler, belge olaylarına abone olabilir veya IronPDF kullanarak PDF'ler içinde dinamik HTML içeriklerinin oluşturulmasını kolaylaştırabilir.
C#’ta olay odaklı programlamada delegelerin rolü nedir?
Olay odaklı programlamada delegeler, belirli olaylara yanıt verebilecek olay işleyicileri oluşturmayı mümkün kılar, olaylar meydana geldiğinde harici bileşenleri bilgilendirmek için temiz ve modüler bir geri çağırma mekanizması sağlarlar.
C#’ta çoklu gönderme delegeleri nasıl çalışır?
C#’ta çoklu gönderme delegeleri, birden fazla metodu tek bir delege örneğinde birleştirmeye izin verir. Bu, delegedeki tüm metodların ardışık olarak çağrılmasına olanak tanır ve karmaşık olay işleme senaryolarını kolaylaştırır.
C# delegeleri lambda ifadeleri ile kullanılabilir mi?
Evet, C# delegeleri lambda ifadeleri ile kullanılabilir, metod gövdelerinin satır içi tanımlanmasına olanak tanıyan özlü bir yol sağlar. Bu, kodun okunabilirliğini ve esnekliğini artırır, delegelere metodların kolay atanmasına olanak tanır.
C#’ta bir delege nasıl ilan edilir ve kullanılır?
C#’ta bir delege kullanmak için, bir delege türünü ilan edin, bir metod referansı ile örnekleyin ve referans verilen metodları çalıştırmak için onu çağırın. Bu süreç, esnek metod çağrımı ve dinamik kod yürütmeyi sağlar.
Geliştiriciler, belge oluşturma için C# projelerine PDF kütüphanelerini nasıl entegre edebilir?
Geliştiriciler, Paket Yöneticisi Konsolu veya NuGet Paket Yöneticisi aracılığıyla uygun NuGet paketini yükleyerek PDF kütüphanelerini entegre edebilir. IronPDF gibi kütüphaneler PDF oluşturma ve manipülasyonu için sağlam çözümler sunar.




