<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>eventler arşivleri - Keşif Ruhu</title>
	<atom:link href="https://www.kesifruhu.com/tag/eventler/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.kesifruhu.com/tag/eventler/</link>
	<description>Keşfet, Deneyimle, Paylaş</description>
	<lastBuildDate>Wed, 14 May 2025 13:51:06 +0000</lastBuildDate>
	<language>tr</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.3</generator>

<image>
	<url>https://www.kesifruhu.com/wp-content/uploads/2024/09/siteico-150x150.png</url>
	<title>eventler arşivleri - Keşif Ruhu</title>
	<link>https://www.kesifruhu.com/tag/eventler/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>15. Olaylar ve Delegeler</title>
		<link>https://www.kesifruhu.com/yazilim/15-olaylar-ve-delegeler/</link>
					<comments>https://www.kesifruhu.com/yazilim/15-olaylar-ve-delegeler/#respond</comments>
		
		<dc:creator><![CDATA[darklaz]]></dc:creator>
		<pubDate>Wed, 14 May 2025 13:49:44 +0000</pubDate>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Yazılım]]></category>
		<category><![CDATA[delegeler]]></category>
		<category><![CDATA[eventler]]></category>
		<category><![CDATA[olaylar]]></category>
		<guid isPermaLink="false">https://www.kesifruhu.com/?p=605</guid>

					<description><![CDATA[<p>C# Programlama Dili: 15.Olaylar ve Delegeler C# programlama dilinde olaylar (events) ve delegeler (delegates), nesne yönelimli programlamanın temel taşlarından biridir. Bu yapılar, bir nesnenin durumundaki <a class="mh-excerpt-more" href="https://www.kesifruhu.com/yazilim/15-olaylar-ve-delegeler/" title="15. Olaylar ve Delegeler">[...]</a></p>
<p><a href="https://www.kesifruhu.com/yazilim/15-olaylar-ve-delegeler/">15. Olaylar ve Delegeler</a> yazısı ilk önce <a href="https://www.kesifruhu.com">Keşif Ruhu</a> üzerinde ortaya çıktı.</p>
]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-large"><img decoding="async" src="https://images.pexels.com/photos/577585/pexels-photo-577585.jpeg?auto=compress&amp;cs=tinysrgb&amp;fit=crop&amp;h=627&amp;w=1200" alt="image text"/></figure>



<p></p>



<p><br><br><br><br><br></p>



<h1 class="wp-block-heading">C# Programlama Dili: 15.Olaylar ve Delegeler</h1>



<p>C# programlama dilinde olaylar (events) ve delegeler (delegates), nesne yönelimli programlamanın temel taşlarından biridir. Bu yapılar, bir nesnenin durumundaki değişiklikleri diğer nesnelere bildirmesini sağlayarak, gevşek bağlı (loosely coupled) sistemlerin oluşturulmasına olanak tanır. Bu makalede, C# dilindeki olaylar ve delegeleri detaylı bir şekilde inceleyeceğiz.</p>



<h2 class="wp-block-heading">Delegeler (Delegates)</h2>



<p>Delegeler, fonksiyon işaretçilerine benzer ve metotları değişkenler gibi kullanmamızı sağlayan yapılardır. Bir delege, belirli bir imza (signature) ile tanımlanır ve aynı imzaya sahip herhangi bir metodu referans edebilir. Bu, delegelerin, metotları parametre olarak geçirmemize, metotları bir koleksiyonda saklamamıza veya çalışma zamanında hangi metodun çağrılacağını belirlememize olanak tanır.</p>



<h3 class="wp-block-heading">Delege Tanımlama</h3>



<p>Bir delege tanımlamak için <code>delegate</code> anahtar kelimesi kullanılır. Delege tanımı, referans edeceği metodun dönüş tipini ve parametre listesini belirtir.</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2b2b2b;color:#c7c7c7">C#</span><span role="button" tabindex="0" data-code="
 // Basit bir delege tanımı
 public delegate void MesajYaz(string mesaj);
" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"></span>
<span class="line"><span style="color: #6A9955"> // Basit bir delege tanımı</span></span>
<span class="line"><span style="color: #D4D4D4"> </span><span style="color: #569CD6">public</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">delegate</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">void</span><span style="color: #D4D4D4"> </span><span style="color: #4EC9B0">MesajYaz</span><span style="color: #D4D4D4">(</span><span style="color: #569CD6">string</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">mesaj</span><span style="color: #D4D4D4">);</span></span>
<span class="line"></span></code></pre></div>



<p></p>



<p>Bu örnekte, <code>MesajYaz</code> adında bir delege tanımlanmıştır. Bu delege, <code>string</code> türünde bir parametre alan ve <code>void</code> (geri dönüş değeri olmayan) bir metodu referans edebilir.</p>



<h3 class="wp-block-heading">Delege Örneği</h3>



<p>Aşağıdaki örnek, bir delegenin nasıl kullanılacağını göstermektedir:</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2b2b2b;color:#c7c7c7">C#</span><span role="button" tabindex="0" data-code="
 using System;

 public class Program
 {
   public delegate void MesajYaz(string mesaj);

   public static void SelamVer(string mesaj)
   {
     Console.WriteLine(&quot;Selam: &quot; + mesaj);
   }

   public static void GuleGule(string mesaj)
   {
     Console.WriteLine(&quot;Güle Güle: &quot; + mesaj);
   }

   public static void Main(string[] args)
   {
     MesajYaz delege1 = new MesajYaz(SelamVer);
     MesajYaz delege2 = new MesajYaz(GuleGule);
  
     delege1(&quot;Dünya&quot;); // Output: Selam: Dünya
     delege2(&quot;Yine Bekleriz&quot;); // Output: Güle Güle: Yine Bekleriz
  
     // Çoklu delege (Multicast Delegate)
     MesajYaz cokluDelege = delege1 + delege2;
     cokluDelege(&quot;Herkese&quot;);
     // Output:
     // Selam: Herkese
     // Güle Güle: Herkese
   }
 }
  " style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"></span>
<span class="line"><span style="color: #D4D4D4"> </span><span style="color: #C586C0">using</span><span style="color: #D4D4D4"> </span><span style="color: #4EC9B0">System</span><span style="color: #D4D4D4">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4"> </span><span style="color: #569CD6">public</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">class</span><span style="color: #D4D4D4"> </span><span style="color: #4EC9B0">Program</span></span>
<span class="line"><span style="color: #D4D4D4"> {</span></span>
<span class="line"><span style="color: #D4D4D4">   </span><span style="color: #569CD6">public</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">delegate</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">void</span><span style="color: #D4D4D4"> </span><span style="color: #4EC9B0">MesajYaz</span><span style="color: #D4D4D4">(</span><span style="color: #569CD6">string</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">mesaj</span><span style="color: #D4D4D4">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">   </span><span style="color: #569CD6">public</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">static</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">void</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">SelamVer</span><span style="color: #D4D4D4">(</span><span style="color: #569CD6">string</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">mesaj</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #D4D4D4">   {</span></span>
<span class="line"><span style="color: #D4D4D4">     </span><span style="color: #9CDCFE">Console</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">WriteLine</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;Selam: &quot;</span><span style="color: #D4D4D4"> + </span><span style="color: #9CDCFE">mesaj</span><span style="color: #D4D4D4">);</span></span>
<span class="line"><span style="color: #D4D4D4">   }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">   </span><span style="color: #569CD6">public</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">static</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">void</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">GuleGule</span><span style="color: #D4D4D4">(</span><span style="color: #569CD6">string</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">mesaj</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #D4D4D4">   {</span></span>
<span class="line"><span style="color: #D4D4D4">     </span><span style="color: #9CDCFE">Console</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">WriteLine</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;Güle Güle: &quot;</span><span style="color: #D4D4D4"> + </span><span style="color: #9CDCFE">mesaj</span><span style="color: #D4D4D4">);</span></span>
<span class="line"><span style="color: #D4D4D4">   }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">   </span><span style="color: #569CD6">public</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">static</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">void</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">Main</span><span style="color: #D4D4D4">(</span><span style="color: #569CD6">string</span><span style="color: #D4D4D4">[] </span><span style="color: #9CDCFE">args</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #D4D4D4">   {</span></span>
<span class="line"><span style="color: #D4D4D4">     </span><span style="color: #4EC9B0">MesajYaz</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">delege1</span><span style="color: #D4D4D4"> = </span><span style="color: #569CD6">new</span><span style="color: #D4D4D4"> </span><span style="color: #4EC9B0">MesajYaz</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">SelamVer</span><span style="color: #D4D4D4">);</span></span>
<span class="line"><span style="color: #D4D4D4">     </span><span style="color: #4EC9B0">MesajYaz</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">delege2</span><span style="color: #D4D4D4"> = </span><span style="color: #569CD6">new</span><span style="color: #D4D4D4"> </span><span style="color: #4EC9B0">MesajYaz</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">GuleGule</span><span style="color: #D4D4D4">);</span></span>
<span class="line"><span style="color: #D4D4D4">  </span></span>
<span class="line"><span style="color: #D4D4D4">     </span><span style="color: #DCDCAA">delege1</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;Dünya&quot;</span><span style="color: #D4D4D4">); </span><span style="color: #6A9955">// Output: Selam: Dünya</span></span>
<span class="line"><span style="color: #D4D4D4">     </span><span style="color: #DCDCAA">delege2</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;Yine Bekleriz&quot;</span><span style="color: #D4D4D4">); </span><span style="color: #6A9955">// Output: Güle Güle: Yine Bekleriz</span></span>
<span class="line"><span style="color: #D4D4D4">  </span></span>
<span class="line"><span style="color: #6A9955">     // Çoklu delege (Multicast Delegate)</span></span>
<span class="line"><span style="color: #D4D4D4">     </span><span style="color: #4EC9B0">MesajYaz</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">cokluDelege</span><span style="color: #D4D4D4"> = </span><span style="color: #9CDCFE">delege1</span><span style="color: #D4D4D4"> + </span><span style="color: #9CDCFE">delege2</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #D4D4D4">     </span><span style="color: #DCDCAA">cokluDelege</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;Herkese&quot;</span><span style="color: #D4D4D4">);</span></span>
<span class="line"><span style="color: #6A9955">     // Output:</span></span>
<span class="line"><span style="color: #6A9955">     // Selam: Herkese</span></span>
<span class="line"><span style="color: #6A9955">     // Güle Güle: Herkese</span></span>
<span class="line"><span style="color: #D4D4D4">   }</span></span>
<span class="line"><span style="color: #D4D4D4"> }</span></span>
<span class="line"><span style="color: #D4D4D4">  </span></span></code></pre></div>



<p></p>



<p>Bu örnekte, <code>SelamVer</code> ve <code>GuleGule</code> adlı iki metot tanımlanmıştır. Her iki metot da <code>MesajYaz</code> delege türüyle uyumludur. <code>Main</code> metodunda, bu metotlar delegelere atanır ve delegeler aracılığıyla çağrılır. Ayrıca, iki delege birleştirilerek çoklu bir delege (multicast delegate) oluşturulur ve bu delege çağrıldığında her iki metot da çalıştırılır.</p>



<h2 class="wp-block-heading">Olaylar (Events)</h2>



<p>Olaylar, bir sınıfın veya nesnenin, durumundaki bir değişiklik hakkında diğer sınıfları veya nesneleri bilgilendirmesini sağlayan mekanizmalardır. Olaylar, delegeleri temel alır ve yayıncı (publisher) ile abone (subscriber) arasında bir iletişim kurar. Yayıncı, olayı tetiklerken, aboneler bu olayı dinler ve olay gerçekleştiğinde belirlenen metotları çalıştırır.</p>



<h3 class="wp-block-heading">Olay Tanımlama</h3>



<p>Bir olay tanımlamak için <code>event</code> anahtar kelimesi kullanılır. Olay tanımı, bir delege türü belirtir ve bu delege türü, olayın tetiklendiğinde çağrılacak metotların imzasını tanımlar.</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2b2b2b;color:#c7c7c7">C#</span><span role="button" tabindex="0" data-code="
 public delegate void VeriDegistiEventHandler(object sender, EventArgs e);

 public class VeriKaynagi
 {
   public event VeriDegistiEventHandler VeriDegisti;

   protected virtual void OnVeriDegisti(EventArgs e)
   {
     VeriDegisti?.Invoke(this, e);
   }

   public void VeriyiDegistir()
   {
     // Veriyi değiştir
     OnVeriDegisti(EventArgs.Empty);
   }
 }
" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"></span>
<span class="line"><span style="color: #D4D4D4"> </span><span style="color: #569CD6">public</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">delegate</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">void</span><span style="color: #D4D4D4"> </span><span style="color: #4EC9B0">VeriDegistiEventHandler</span><span style="color: #D4D4D4">(</span><span style="color: #569CD6">object</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">sender</span><span style="color: #D4D4D4">, </span><span style="color: #4EC9B0">EventArgs</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">e</span><span style="color: #D4D4D4">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4"> </span><span style="color: #569CD6">public</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">class</span><span style="color: #D4D4D4"> </span><span style="color: #4EC9B0">VeriKaynagi</span></span>
<span class="line"><span style="color: #D4D4D4"> {</span></span>
<span class="line"><span style="color: #D4D4D4">   </span><span style="color: #569CD6">public</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">event</span><span style="color: #D4D4D4"> </span><span style="color: #4EC9B0">VeriDegistiEventHandler</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">VeriDegisti</span><span style="color: #D4D4D4">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">   </span><span style="color: #569CD6">protected</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">virtual</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">void</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">OnVeriDegisti</span><span style="color: #D4D4D4">(</span><span style="color: #4EC9B0">EventArgs</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">e</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #D4D4D4">   {</span></span>
<span class="line"><span style="color: #D4D4D4">     </span><span style="color: #9CDCFE">VeriDegisti</span><span style="color: #D4D4D4">?.</span><span style="color: #DCDCAA">Invoke</span><span style="color: #D4D4D4">(</span><span style="color: #569CD6">this</span><span style="color: #D4D4D4">, </span><span style="color: #9CDCFE">e</span><span style="color: #D4D4D4">);</span></span>
<span class="line"><span style="color: #D4D4D4">   }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">   </span><span style="color: #569CD6">public</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">void</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">VeriyiDegistir</span><span style="color: #D4D4D4">()</span></span>
<span class="line"><span style="color: #D4D4D4">   {</span></span>
<span class="line"><span style="color: #6A9955">     // Veriyi değiştir</span></span>
<span class="line"><span style="color: #D4D4D4">     </span><span style="color: #DCDCAA">OnVeriDegisti</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">EventArgs</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">Empty</span><span style="color: #D4D4D4">);</span></span>
<span class="line"><span style="color: #D4D4D4">   }</span></span>
<span class="line"><span style="color: #D4D4D4"> }</span></span>
<span class="line"></span></code></pre></div>



<p></p>



<p>Bu örnekte, <code>VeriDegistiEventHandler</code> adında bir delege tanımlanmıştır. Bu delege, <code>object</code> türünde bir <code>sender</code> (olayı başlatan nesne) ve <code>EventArgs</code> türünde bir <code>e</code> (olay argümanları) parametresi alır. <code>VeriKaynagi</code> sınıfında, <code>VeriDegisti</code> adında bir olay tanımlanmıştır ve bu olay, <code>VeriDegistiEventHandler</code> delege türünü kullanır. <code>OnVeriDegisti</code> metodu, olayı tetiklemek için kullanılır. <code>VeriDegistir</code> metodu, veriyi değiştirdikten sonra <code>OnVeriDegisti</code> metodunu çağırarak olayı tetikler.</p>



<h3 class="wp-block-heading">Olay Aboneliği</h3>



<p>Bir olaya abone olmak için, <code>+=</code> operatörü kullanılır. Bu operatör, bir metodu olayın olay işleyicisine ekler. Olay tetiklendiğinde, bu metot otomatik olarak çağrılır.</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2b2b2b;color:#c7c7c7">C#</span><span role="button" tabindex="0" data-code="
 using System;

 public class Program
 {
   public delegate void VeriDegistiEventHandler(object sender, EventArgs e);
  
   public class VeriKaynagi
   {
     public event VeriDegistiEventHandler VeriDegisti;
  
     protected virtual void OnVeriDegisti(EventArgs e)
     {
       VeriDegisti?.Invoke(this, e);
     }
  
     public void VeriyiDegistir()
     {
     // Veriyi değiştir
       OnVeriDegisti(EventArgs.Empty);
     }
   }
  
   public class VeriDinleyici
   {
     public void VeriDegistiHandler(object sender, EventArgs e)
     {
       Console.WriteLine(&quot;Veri değişti!&quot;);
     }  
   }
  
   public static void Main(string[] args)
   {
     VeriKaynagi kaynak = new VeriKaynagi();
     VeriDinleyici dinleyici = new VeriDinleyici();
    
     kaynak.VeriDegisti += dinleyici.VeriDegistiHandler;
    
     kaynak.VeriyiDegistir(); // Output: Veri değişti!
   }
}
" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"></span>
<span class="line"><span style="color: #D4D4D4"> </span><span style="color: #C586C0">using</span><span style="color: #D4D4D4"> </span><span style="color: #4EC9B0">System</span><span style="color: #D4D4D4">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4"> </span><span style="color: #569CD6">public</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">class</span><span style="color: #D4D4D4"> </span><span style="color: #4EC9B0">Program</span></span>
<span class="line"><span style="color: #D4D4D4"> {</span></span>
<span class="line"><span style="color: #D4D4D4">   </span><span style="color: #569CD6">public</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">delegate</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">void</span><span style="color: #D4D4D4"> </span><span style="color: #4EC9B0">VeriDegistiEventHandler</span><span style="color: #D4D4D4">(</span><span style="color: #569CD6">object</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">sender</span><span style="color: #D4D4D4">, </span><span style="color: #4EC9B0">EventArgs</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">e</span><span style="color: #D4D4D4">);</span></span>
<span class="line"><span style="color: #D4D4D4">  </span></span>
<span class="line"><span style="color: #D4D4D4">   </span><span style="color: #569CD6">public</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">class</span><span style="color: #D4D4D4"> </span><span style="color: #4EC9B0">VeriKaynagi</span></span>
<span class="line"><span style="color: #D4D4D4">   {</span></span>
<span class="line"><span style="color: #D4D4D4">     </span><span style="color: #569CD6">public</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">event</span><span style="color: #D4D4D4"> </span><span style="color: #4EC9B0">VeriDegistiEventHandler</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">VeriDegisti</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #D4D4D4">  </span></span>
<span class="line"><span style="color: #D4D4D4">     </span><span style="color: #569CD6">protected</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">virtual</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">void</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">OnVeriDegisti</span><span style="color: #D4D4D4">(</span><span style="color: #4EC9B0">EventArgs</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">e</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #D4D4D4">     {</span></span>
<span class="line"><span style="color: #D4D4D4">       </span><span style="color: #9CDCFE">VeriDegisti</span><span style="color: #D4D4D4">?.</span><span style="color: #DCDCAA">Invoke</span><span style="color: #D4D4D4">(</span><span style="color: #569CD6">this</span><span style="color: #D4D4D4">, </span><span style="color: #9CDCFE">e</span><span style="color: #D4D4D4">);</span></span>
<span class="line"><span style="color: #D4D4D4">     }</span></span>
<span class="line"><span style="color: #D4D4D4">  </span></span>
<span class="line"><span style="color: #D4D4D4">     </span><span style="color: #569CD6">public</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">void</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">VeriyiDegistir</span><span style="color: #D4D4D4">()</span></span>
<span class="line"><span style="color: #D4D4D4">     {</span></span>
<span class="line"><span style="color: #6A9955">     // Veriyi değiştir</span></span>
<span class="line"><span style="color: #D4D4D4">       </span><span style="color: #DCDCAA">OnVeriDegisti</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">EventArgs</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">Empty</span><span style="color: #D4D4D4">);</span></span>
<span class="line"><span style="color: #D4D4D4">     }</span></span>
<span class="line"><span style="color: #D4D4D4">   }</span></span>
<span class="line"><span style="color: #D4D4D4">  </span></span>
<span class="line"><span style="color: #D4D4D4">   </span><span style="color: #569CD6">public</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">class</span><span style="color: #D4D4D4"> </span><span style="color: #4EC9B0">VeriDinleyici</span></span>
<span class="line"><span style="color: #D4D4D4">   {</span></span>
<span class="line"><span style="color: #D4D4D4">     </span><span style="color: #569CD6">public</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">void</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">VeriDegistiHandler</span><span style="color: #D4D4D4">(</span><span style="color: #569CD6">object</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">sender</span><span style="color: #D4D4D4">, </span><span style="color: #4EC9B0">EventArgs</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">e</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #D4D4D4">     {</span></span>
<span class="line"><span style="color: #D4D4D4">       </span><span style="color: #9CDCFE">Console</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">WriteLine</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;Veri değişti!&quot;</span><span style="color: #D4D4D4">);</span></span>
<span class="line"><span style="color: #D4D4D4">     }  </span></span>
<span class="line"><span style="color: #D4D4D4">   }</span></span>
<span class="line"><span style="color: #D4D4D4">  </span></span>
<span class="line"><span style="color: #D4D4D4">   </span><span style="color: #569CD6">public</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">static</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">void</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">Main</span><span style="color: #D4D4D4">(</span><span style="color: #569CD6">string</span><span style="color: #D4D4D4">[] </span><span style="color: #9CDCFE">args</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #D4D4D4">   {</span></span>
<span class="line"><span style="color: #D4D4D4">     </span><span style="color: #4EC9B0">VeriKaynagi</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">kaynak</span><span style="color: #D4D4D4"> = </span><span style="color: #569CD6">new</span><span style="color: #D4D4D4"> </span><span style="color: #4EC9B0">VeriKaynagi</span><span style="color: #D4D4D4">();</span></span>
<span class="line"><span style="color: #D4D4D4">     </span><span style="color: #4EC9B0">VeriDinleyici</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">dinleyici</span><span style="color: #D4D4D4"> = </span><span style="color: #569CD6">new</span><span style="color: #D4D4D4"> </span><span style="color: #4EC9B0">VeriDinleyici</span><span style="color: #D4D4D4">();</span></span>
<span class="line"><span style="color: #D4D4D4">    </span></span>
<span class="line"><span style="color: #D4D4D4">     </span><span style="color: #9CDCFE">kaynak</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">VeriDegisti</span><span style="color: #D4D4D4"> += </span><span style="color: #9CDCFE">dinleyici</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">VeriDegistiHandler</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #D4D4D4">    </span></span>
<span class="line"><span style="color: #D4D4D4">     </span><span style="color: #9CDCFE">kaynak</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">VeriyiDegistir</span><span style="color: #D4D4D4">(); </span><span style="color: #6A9955">// Output: Veri değişti!</span></span>
<span class="line"><span style="color: #D4D4D4">   }</span></span>
<span class="line"><span style="color: #D4D4D4">}</span></span>
<span class="line"></span></code></pre></div>



<p></p>



<p>Bu örnekte, <code>VeriDinleyici</code> sınıfında <code>VeriDegistiHandler</code> adında bir metot tanımlanmıştır. Bu metot, <code>VeriDegistiEventHandler</code> delege türüyle uyumludur. <code>Main</code> metodunda, <code>VeriKaynagi</code> ve <code>VeriDinleyici</code> nesneleri oluşturulur. <code>VeriDegistiHandler</code> metodu, <code>VeriKaynagi</code> nesnesinin <code>VeriDegisti</code> olayına abone olur. <code>VeriKaynagi.VeriyiDegistir()</code> çağrıldığında, <code>VeriDegisti</code> olayı tetiklenir ve <code>VeriDinleyici.VeriDegistiHandler()</code> metodu otomatik olarak çalışır.</p>



<h3 class="wp-block-heading">Neden Olaylar?</h3>



<p>Olaylar, delegelerin daha kontrollü bir şekilde kullanılmasını sağlar. Olaylar, dış sınıfların bir delegenin içeriğini değiştirmesini engeller. Bir olay sadece tanımlandığı sınıf içinde tetiklenebilir. Bu, olayların daha güvenli ve öngörülebilir olmasını sağlar.</p>



<h2 class="wp-block-heading">Delegeler ve Olayların Kullanım Alanları</h2>



<ul class="wp-block-list">
<li><strong>GUI Uygulamaları:</strong> Buton tıklamaları, menü seçimleri gibi kullanıcı etkileşimlerini yönetmek için kullanılır.</li>



<li><strong>Asenkron Programlama:</strong> Bir işlemin tamamlandığını bildirmek için kullanılır.</li>



<li><strong>Observer Pattern:</strong> Bir nesnenin durumundaki değişiklikleri diğer nesnelere bildirmek için kullanılır.</li>



<li><strong>Middleware:</strong> Uygulama bileşenleri arasında iletişim kurmak için kullanılır.</li>
</ul>



<h2 class="wp-block-heading">Sonuç</h2>



<p>Olaylar ve delegeler, C# programlama dilinin güçlü ve esnek özelliklerindendir. Bu yapılar, gevşek bağlı sistemlerin oluşturulmasına, kodun yeniden kullanılabilirliğinin artırılmasına ve uygulamanın genel tasarımının iyileştirilmesine yardımcı olur. Olaylar ve delegeleri doğru bir şekilde kullanarak, daha modüler, test edilebilir ve sürdürülebilir uygulamalar geliştirebilirsiniz.</p>



<p>&nbsp;</p>
<p><a href="https://www.kesifruhu.com/yazilim/15-olaylar-ve-delegeler/">15. Olaylar ve Delegeler</a> yazısı ilk önce <a href="https://www.kesifruhu.com">Keşif Ruhu</a> üzerinde ortaya çıktı.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.kesifruhu.com/yazilim/15-olaylar-ve-delegeler/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
