<?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>Nurullah DEMİR - The day will come just wait.. &#187; multicasdelegate coklu temsilci</title>
	<atom:link href="http://www.ndemir.com/tag/multicasdelegate-coklu-temsilci/feed" rel="self" type="application/rss+xml" />
	<link>http://www.ndemir.com</link>
	<description>The day will come just wait..</description>
	<lastBuildDate>Sat, 04 Feb 2012 02:10:47 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>C# : Delegates (temsilciler)</title>
		<link>http://www.ndemir.com/_net/dot-net-c-sharp/c-delegates-temsilciler</link>
		<comments>http://www.ndemir.com/_net/dot-net-c-sharp/c-delegates-temsilciler#comments</comments>
		<pubDate>Thu, 18 Feb 2010 22:29:18 +0000</pubDate>
		<dc:creator>Nurullah</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[c# delegate]]></category>
		<category><![CDATA[c# delegate & temsilci kavramının kullanımı]]></category>
		<category><![CDATA[c# temscilci]]></category>
		<category><![CDATA[çoklu temsilciler multi delegates]]></category>
		<category><![CDATA[delegate]]></category>
		<category><![CDATA[multicasdelegate coklu temsilci]]></category>
		<category><![CDATA[multicast delegate]]></category>
		<category><![CDATA[temsilciler]]></category>

		<guid isPermaLink="false">http://www.ndemir.com/?p=2054</guid>
		<description><![CDATA[C# da bilinmesi gereken ayrı bir konu Delegateler yani temsilcilerdir. Delegateler metodları temsil eder. Temsilcilerinin kullanılmasının amacı, belli olmayan metot çağrımlarını çalışma zamanında belirlemektir. Bildirimi aşağıdaki gibidir. Delegate yapısı c++ dilindeki function pointerlara tekabül ediyor. Delegate konusu da interface gibi tek başına bir anlamlı bir konu değil, kafanızda bunu ben nerde niye kullanayım, bu ne işe [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft" src="http://www.ndemir.com/wp-content/uploads/c-sharp-150x150.png" alt="c sharp 150x150 C# : Delegates (temsilciler) dot net c sharp " width="150" height="150" title="c sharp 150x150 C# : Delegates (temsilciler) dot net c sharp " />C# da bilinmesi gereken ayrı bir konu <span style="color: #3366ff;">Delegate</span>ler yani temsilcilerdir. Delegateler metodları temsil eder.</p>
<p>Temsilcilerinin kullanılmasının amacı, belli olmayan metot çağrımlarını çalışma zamanında belirlemektir. Bildirimi aşağıdaki gibidir.</p>
<p>Delegate yapısı c++ dilindeki function pointerlara tekabül ediyor. Delegate konusu da interface gibi tek başına bir anlamlı bir konu değil, kafanızda bunu ben nerde niye kullanayım, bu ne işe yarar gibi sorularda kalıcak ama event yapısı ile birleşince olayı daha iyi pekiştirip anlayacaksınız inş. Event yapısınıda bir dahaki dökümanda yazacağım inş.</p>
<p>Delegate&#8217;in en kısa anlatımı şudur herhalde : Delegate&#8217;ler metodların bellekteki adreslerini aklında tutar <img src='http://www.ndemir.com/wp-includes/images/smilies/icon_smile.gif' alt="icon smile C# : Delegates (temsilciler) dot net c sharp " class='wp-smiley' title="icon smile C# : Delegates (temsilciler) dot net c sharp " /> </p>
<p>[Erişim belirleyicisi] delegate [geri dönüş tipi] [delegate ismi] (parametreler);</p>
<p>public delegate int Topla(int s1,int s2);</p>
<p>Aşağıdaki kodu inceleyin.</p>
<pre class="brush: cpp; title: ; notranslate">
using System;

namespace _Delegate
{
    class Program
    {
        public delegate int TemsilcimHandler(int sayi1,int sayi2);

        public static int Topla(int t1, int t2)
        {
            return t1 + t2;
        }
        public static int Carp(int c1,int c2)
        {
            return c1 * c2;
        }

        static void Main(string[] args)
        {
            int s1, s2;
            Console.Write(&quot;1. sayi : &quot;);
            s1 = Convert.ToInt32(Console.ReadLine());
             Console.Write(&quot;2. sayi : &quot;);
            s2 = Convert.ToInt32(Console.ReadLine());

            TemsilcimHandler temsilci ;

            temsilci = new TemsilcimHandler(Topla);
            Console.WriteLine(&quot;Topla metodu :&quot; + temsilci(s1, s2));

            temsilci = new TemsilcimHandler(Carp);
            Console.WriteLine(&quot;Çarpım metodu : &quot; + temsilci(s1, s2));

            Console.Read();
        }

    }
</pre>
<p><span id="more-2054"></span></p>
<p>Programımızın amacı kullanıcıdan 2 sayı alıp bu iki sayının toplamını ve çarpımını vermek. Burada iki ayrı metod var Topla ve Carp isminde, geri dönüş tipleri int, aldıkları iki değer var.<br />
Temscililerin yani delegatelerin metodları temsil ettiğini söylemiştik.<br />
Temsilcim adında bir delegate oluşturduk, ardından <strong>Topla </strong>ve <strong>Carp </strong>metodlarını yazdık.</p>
<p>Dikkat ederseniz metod ile delegate yapı olarak aynıdır, aldıkları değerler, geri dönüş tipleri ve imzaları özdeştir. Eğer böyle yapmasaydık hata alırdık.<br />
Buna açıklık getirmek için şöyle bir izahta yapabiliriz. Birşeyi ne temsil edebilir ? <span style="color: #888888;">Tabii ki kendisine benzeyen birşey.</span></p>
<p>Şimdi gelelim programımızda ne yaptığımıza. Kullanıcıdan 2 sayı alıp bunları s1 ve s2 değişkenilerine atadık.<br />
Ardından oluşturduğumuz temsilci isimli delegate&#8217;i kuruyoruz. Kurulumu sınıf kurmaktaktan hiçbir farkı yok. Yapıcı metod isterken dikkat edin;</p>
<p><img class="alignnone size-full wp-image-2055" title="delegate constructor" src="http://www.ndemir.com/wp-content/uploads/delegate-constructor.png" alt="delegate constructor C# : Delegates (temsilciler) dot net c sharp " width="333" height="62" /><br />
Şeklinde istemektedir. Burada<strong> geri dönüş tipi int, aldığı iki parametrenin de int </strong>türünden olduğu gösterilmektedir. Buraya temsil edilecek metodu yazıyoruz. Daha sonra çağırmak istediğimizde de aşağıdaki şekilde kullanıyoruz.<br />
temscilci(s1, s2);<br />
Delegate kavramı zaten kendisine bildirilen metodu temsil ettiğine göre yukarıdaki şekilde temsil edilen metodu çağırıyoruz.</p>
<h3>Çoklu Temsilciler</h3>
<p>Temsilcimiz sadece bir metodu temsil etmeyebilir. Birden fazla metodu temsil etmesini de isteyebiliriz. Biz yukarıda temsilci nesnesini iki defa tanımladık, birini <span style="color: #888888;">Topla </span>metodu için diğerini ise <span style="color: #888888;">Carp </span>metodu için ama şimdi yapacağımız işlem ile her iki metodu aynı temsilci temsil edip, aynı anda çağıracak. Bu işlemi+= operatörü devreye girmektedir. += operatörü zorunluluk değildir, i+=1; gibi düşünün <img src='http://www.ndemir.com/wp-includes/images/smilies/icon_smile.gif' alt="icon smile C# : Delegates (temsilciler) dot net c sharp " class='wp-smiley' title="icon smile C# : Delegates (temsilciler) dot net c sharp " />  Konuyu dağıtmadan örneğe geçmek istiyorum.</p>
<pre class="brush: cpp; title: ; notranslate">
using System;

namespace _Delegate
{
    class Program
    {

        public delegate void TemsilcimHandler(int sayi1, int sayi2);

        public static void Topla(int t1, int t2)
        {
            Console.WriteLine(&quot;Toplama işleminin sonucu : {0}&quot;, t1 + t2);
        }
        public static void Carp(int c1, int c2)
        {
            Console.WriteLine(&quot;Çarpma işleminin sonucu : {0}&quot;, c1 * c2);
        }

        static void Main(string[] args)
        {
            temsilci;
            temsilci = new TemsilcimHandler(Topla);
            temsilci += new TemsilcimHandler(Carp);
            temsilci(3, 5);

            Console.Read();
        }

    }
}
</pre>
<p>Gördüğünüz gibi 23. satırda bahsettiğimiz işlemi gerçekleştirdik, += operatörünün yanında -+ operatürünü kullanarak önceden eklediğimiz bir metodu temsilciden çıkarabiliriz.<br />
24. satırda ise her iki metodu aynı anda çağırdık. Ve ekran çıktısını aşağıdaki şekilde aldık.</p>
<blockquote><p>Toplama işleminin sonucu : 8<br />
Çarpma işleminin sonucu : 15</p></blockquote>
<p><em> Ayrıca dizi şeklinde de tanımlayabilirdik ve istediğimiz metoda tek tek de ulaşabilirdik.Burada GetInvocationList ve DynamicInvoke araya girmektedir. Kullanımı oldukça basit aşağıdaki kod bloğunu inceleyiniz, gerekli yerlerde yorum satırları bulunmakta.</em></p>
<pre class="brush: cpp; title: ; notranslate">
using System;

namespace _Delegate
{
    class Program
    {

        public delegate void TemsilcimHandler(int sayi1, int sayi2);

        public static void Topla(int t1, int t2)
        {
            Console.WriteLine(&quot;Toplama işleminin sonucu : {0}&quot;, t1 + t2);
        }
        public static void Carp(int c1, int c2)
        {
            Console.WriteLine(&quot;Çarpma işleminin sonucu : {0}&quot;, c1 * c2);
        }
        static void Main(string[] args)
        {
            TemsilcimHandler temsilci;
            temsilci = new TemsilcimHandler(Topla);
            temsilci += new TemsilcimHandler(Carp);

            //Delegate türünden bir dizi oluşturup, temsilci delegateini GetInvocationList ile buna atıyoruz.
            Delegate[] cokluTemsilci = temsilci.GetInvocationList();

            //Burada değer ataması yaptık, object[] parametre={5,2}; şeklinde bir diziyide bildirebilirdik.
            cokluTemsilci[0].DynamicInvoke(5, 2);
            cokluTemsilci[1].DynamicInvoke(5, 2);
            Console.Read();
        }

    }
}
</pre>
<p><em>Not:</em> Delegate isimlerinin sonuna Handler eklememin sebebi ; .NET kütüphanesinde tüm delegate lerin sonuna Handler takısı eklenmiştir, bir nevi gelenektir <img src='http://www.ndemir.com/wp-includes/images/smilies/icon_smile.gif' alt="icon smile C# : Delegates (temsilciler) dot net c sharp " class='wp-smiley' title="icon smile C# : Delegates (temsilciler) dot net c sharp " /><br />
Bir dahaki yazıda görüşmek üzere inş. Hayırlı işler</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ndemir.com/_net/dot-net-c-sharp/c-delegates-temsilciler/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

