﻿
{"id":283,"date":"2012-03-21T00:40:28","date_gmt":"2012-03-21T00:40:28","guid":{"rendered":"http:\/\/www.gencayyildiz.com\/blog\/?p=283"},"modified":"2012-05-28T12:59:26","modified_gmt":"2012-05-28T12:59:26","slug":"cta-delegatetemsilci-ve-eventolay-kullanimi","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/cta-delegatetemsilci-ve-eventolay-kullanimi\/","title":{"rendered":"C# Delegate(Temsilci) ve Event(Olay) Kullan\u0131m\u0131"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Bu yaz\u0131mda C#&#8217;ta Delegate(delege) yani temsilci ve Event yani olay konular\u0131ndan bahsedece\u011fim.Tabi \u015funu belirtmek istiyorum ki, yaz\u0131m\u0131 sayfalara b\u00f6lerek ad\u0131m ad\u0131m anlatmay\u0131 daha verimli buluyorum.Delegeler interface gibi tek ba\u015f\u0131na bir anlaml\u0131 konu de\u011fildir.Kafan\u0131zda bu konuyu nerede kullanaca\u011f\u0131m gibisinden sorular olabilir.Ama Event konusuyla ba\u011fda\u015ft\u0131r\u0131nca konuyu daha iyi irdeleyip anlamaya ba\u015flayacaks\u0131n\u0131z.<br \/>\n<!--more--><span style=\"color: #ff0000;\"><strong>Delegate<\/strong><\/span><br \/>\nDelegeler, metodlar\u0131n adreslerini dolay\u0131s\u0131yla metodlar\u0131n kendilerini tutabilen, i\u015faret edebilen yap\u0131lard\u0131r.<br \/>\nNOT : Metodlar da bellekte olu\u015fan ve bellek adresleri olan yap\u0131lard\u0131r.<br \/>\nDelegeler referans tipli yap\u0131lard\u0131r.Yani nesne olu\u015fturulabilirler.<br \/>\n\u015eimdi bir delege yap\u0131s\u0131 nas\u0131l olur bakal\u0131m.<br \/>\n[Eri\u015fim Belirleyicisi] delege [geri d\u00f6n\u00fc\u015f tipi] [delege ismi] (e\u011fer varsa parametre)<br \/>\n\u00d6rnek olarak a\u015fa\u011f\u0131daki delege yap\u0131s\u0131n\u0131 inceleyiniz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\npublic delegate void MyDelegeHandler();\r\n\/\/Geri d\u00f6n\u00fc\u015f tipi olmayan ve parametre almayan metodlar i\u00e7in kullan\u0131l\u0131r.\r\n<\/pre>\n<p>Delege temsil edece\u011fi metoda imzas\u0131 benzemek zorundad\u0131r.Yani yukar\u0131daki delegeye geri d\u00f6n\u00fc\u015f tipi int olan bir metod ya da parametre alan ba\u015fka bir metod veremeyiz. \u015eunuda izah edeyim ki, delege isimlerinin sonuna Handler konmak yaz\u0131l\u0131m gelene\u011finin adetlerindendir.Zorunlu de\u011fildir ama bu d\u00fcnyan\u0131n k\u00fclt\u00fcrlerindendir. \ud83d\ude42 A\u015fa\u011f\u0131daki delege t\u00fcrlerini inceleyeniz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\npublic delegate void MyDelegeHandler2(int a,int b);\r\n\/\/Geri d\u00f6n\u00fc\u015f tipi olmayan ve int tipinden iki adet parametre alan metodlar i\u00e7in kullan\u0131l\u0131r.\r\n----\r\npublic delegate int MyDelegeHandler3(int a,int b);\r\n\/\/Geri d\u00f6n\u00fc\u015f tipi int olan ve int tipinden iki adet parametre alan metodlar i\u00e7in kullan\u0131l\u0131r.\r\n----\r\npublic delegate string MyDelegeHandler4();\r\n\/\/Geri d\u00f6n\u00fc\u015f tipi string olan ve parametre almayan metodlar i\u00e7in kullan\u0131l\u0131r.\r\n<\/pre>\n<hr \/>\n<p>Buraya kadar delegenin yap\u0131s\u0131yla ilgili bilgi verdim.\u015eimdi delegeyi kullanmay\u0131 g\u00f6relim.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        public delegate void CalismaHandler();\r\n        public void x()\r\n        {\r\n            MessageBox.Show(&quot;x metodu&quot;);\r\n        }\r\n<\/pre>\n<p>Yukar\u0131da, bir tane geriye de\u011fer g\u00f6ndermeyen ve parametre almayan delegate ve bir tane geriye de\u011fer g\u00f6ndermeyen parametre almayan metodumuz mevcuttur.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        private void Form1_Load(object sender, EventArgs e)\r\n        {\r\n            x();\r\n        }\r\n<\/pre>\n<p>\u0130stesek x metodunu yukar\u0131daki gibi \u00e7a\u011f\u0131r\u0131p \u00e7al\u0131\u015ft\u0131rabiliriz. Peki bu x metodu CalismaHandler delegate i taraf\u0131ndan nas\u0131l \u00e7al\u0131\u015ft\u0131r\u0131labilir? Delegate dedi\u011fimiz yap\u0131 bir referans tipli yap\u0131 oldu\u011fundan referans\u0131n\u0131 tan\u0131mlamal\u0131y\u0131z.Ve bu referans\u0131 tan\u0131mlad\u0131ktan sonra o delegeden bir nesne yarat\u0131p istedi\u011fimiz metodu \u00e7al\u0131\u015ft\u0131rmas\u0131n\u0131 sa\u011flayabiliriz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        private void Form1_Load(object sender, EventArgs e)\r\n        {\r\n            CalismaHandler delege = new CalismaHandler(x);\r\n\/\/Benim yukar\u0131da olu\u015fturdu\u011fum delegeden nesne yarat\u0131yorum.\r\n        }\r\n<\/pre>\n<p>Yukar\u0131da &#8220;delege&#8221; isimli delege nesnesine , x metodunu \u00e7al\u0131\u015ft\u0131racaks\u0131n demi\u015f olduk. \u015eimdi ise , &#8220;delege&#8221; isimli delege nesnesine , x metodunu \u00e7al\u0131\u015ft\u0131ral\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        private void Form1_Load(object sender, EventArgs e)\r\n        {\r\n            CalismaHandler delege = new CalismaHandler(x);\r\n            delege();\/\/delege isimli delegate nesnesi \u00fczerinden x referans\u0131n\u0131 \u00e7al\u0131\u015ft\u0131rm\u0131\u015f olduk.\r\n        }\r\n<\/pre>\n<p>Yukar\u0131da formun load\u0131nda yaz\u0131lan bu kod derlenip \u00e7al\u0131\u015ft\u0131r\u0131ld\u0131\u011f\u0131nda mesaj kutusunda &#8220;x metodu&#8221; yazacakt\u0131r. Ayn\u0131 \u015fekilde a\u015fa\u011f\u0131daki gibi bir \u00e7al\u0131\u015ft\u0131rmada yapabiliriz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        private void Form1_Load(object sender, EventArgs e)\r\n        {\r\n            CalismaHandler delege = new CalismaHandler(x);\r\n            delege.Invoke();\/\/delegenin i\u015faret etti\u011fi metod, delegenin Invoke metodu arac\u0131l\u0131\u011f\u0131yla da \u00e7al\u0131\u015ft\u0131r\u0131labilir.\r\n        }\r\n<\/pre>\n<hr \/>\n<p>\u015eimdi ise delege kullan\u0131m\u0131na bir \u00f6rnek daha g\u00f6sterelim.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        public delegate int IslemYapHandler(int a,int b);\r\n        public int Topla(int s1, int s2)\r\n        {\r\n            return s1 + s2;\r\n        }\r\n        public int Carp(int s1, int s2)\r\n        {\r\n            return s1 * s2;\r\n        }\r\n<\/pre>\n<p>Yukar\u0131da g\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi,geriye int tipinden de\u011fer g\u00f6nderen ve int tipinden iki parametre alan bir tane delege,geriye int tipinden de\u011fer g\u00f6nderen ve int tipinden iki parametre alan iki metod yazd\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        private void Form1_Load(object sender, EventArgs e)\r\n        {\r\n            IslemYapHandler delege = new IslemYapHandler(Topla);\r\n            MessageBox.Show(delege(2, 3).ToString());\r\n            \/\/veya\r\n            MessageBox.Show(delege.Invoke(2, 3).ToString());\r\n        }\r\n<\/pre>\n<p>Ve yazd\u0131\u011f\u0131m bu metodlar\u0131 &#8220;delege&#8221; isminde delegate nesnesine adreslettirdim.delege(2,3) veya delege.Invoke(2,3) diyerek, program\u0131 derleyip \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131mda ekranda 5 yaz\u0131s\u0131n\u0131 g\u00f6rece\u011fim. NOT:&#8221;delege&#8221; isimli delegate nesnesi hem Topla hem de Carp metodlar\u0131n\u0131 adresleyebilir.Ben yukar\u0131da sadece Topla metodunu adreslettim. \u015eimdi gelin Carp metodunuda &#8220;delege&#8221; isimli delegatemize adresleyelim.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\ndelege += Carp;\r\n<\/pre>\n<p>&#8220;delege&#8221; isimli delegate ye Topla metodu verilmi\u015fti.\u015eimdi ayn\u0131 delegate ye Carp metodu da adreslettiriliyor.Yani bir delege ayn\u0131 anda birden fazla metodu adresleyebilir.G\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi bunu &#8221; += &#8221; operat\u00f6r\u00fcyle yap\u0131yor.&#8221; += &#8221; operat\u00f6r\u00fc ile metod eklenirken, &#8221; -= &#8221; operat\u00f6r\u00fcyle metod \u00e7\u0131kart\u0131labilir.( += in anlam\u0131 ba\u011flad\u0131r.) \u015eimdi eklenmi\u015f halde bu program\u0131 \u00e7al\u0131\u015ft\u0131ral\u0131m.Tabi kodlar\u0131m\u0131z b\u00f6yle da\u011f\u0131n\u0131k olunca anlamakta zorlan\u0131rs\u0131n\u0131z.Onun i\u00e7in bir k\u0131sm\u0131 yeniden derleyip yaz\u0131yorum.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n            IslemYapHandler delege = new IslemYapHandler(Topla);\r\n            delege += Carp;\r\n            MessageBox.Show(delege(2,3).ToString());\r\n            \/\/ya da\r\n            MessageBox.Show(delege.Invoke(2,3).ToString());\r\n<\/pre>\n<p>E\u011fer yukar\u0131daki kod blo\u011funu derleyip \u00e7al\u0131\u015ft\u0131r\u0131rsan\u0131z ne olur? San\u0131yorsunuz ki, delegemizin i\u00e7inde iki metod var ve ikiside \u00e7al\u0131\u015ft\u0131r\u0131lacak.Yani \u00f6nce Topla metodu \u00e7al\u0131\u015ft\u0131r\u0131l\u0131p 5 sonucunu verecek, ard\u0131ndan Carp metodu \u00e7al\u0131\u015ft\u0131r\u0131l\u0131p 6 sonucu verilecek.Yada buna benzer durumlar olacak.. Ama sand\u0131\u011f\u0131n\u0131z gibi de\u011fil. \ud83d\ude42 (bende ba\u015fta bu \u015fekilde sanm\u0131\u015ft\u0131m.) Sonu\u00e7 olarak 6 cevab\u0131 verilecektir.\u00c7\u00fcnk\u00fc delegeye ba\u011flanan en son metod \u00e7al\u0131\u015f\u0131r.Burada delegemize ba\u011flanan en son metod Carp metodumuz oldu\u011fu i\u00e7in, o \u00e7al\u0131\u015facakt\u0131r.Yani Topla metodu \u00e7al\u0131\u015f\u0131p, ard\u0131ndan Carp \u00e7al\u0131\u015fmayacakt\u0131r.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n            IslemYapHandler delege = new IslemYapHandler(Topla);\r\n            delege += Carp;\r\n            delege -= Carp;\r\n            MessageBox.Show(delege(2,3).ToString());\r\n<\/pre>\n<p>Yukar\u0131daki kod blo\u011funu incelerseniz e\u011fer, delegemize \u00f6nce Topla metodu ekleniyor.Sonra Carp metodu ekleniyor.En son olarak Carp metodu yeniden c\u0131kar\u0131l\u0131yor.Eee haliyle en son eklenen metod \u00e7al\u0131\u015f\u0131yorsa , en son \u00e7\u0131kar\u0131lan metoddan bir \u00f6nceki \u00e7al\u0131\u015fmak zorundad\u0131r.Yani burada Topla metodu \u00e7al\u0131\u015facakt\u0131r. Bunu \u015f\u00f6yle genelleyebilirim.A,B,C metodlar\u0131n\u0131 s\u0131ras\u0131yla delegemize ba\u011fl\u0131yoruz.Bu durumda \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131m\u0131zda C metodu \u00e7al\u0131\u015facakt\u0131r.C yi \u00e7\u0131kard\u0131\u011f\u0131m\u0131z da, B metodu \u00e7al\u0131\u015facakt\u0131r.Son olarak B c\u0131karsa A metodu \u00e7al\u0131\u015facakt\u0131r.<\/p>\n<hr \/>\n<p>\u015eimdide delegemiz i\u00e7indeki t\u00fcm metodlar\u0131m\u0131z da s\u0131ras\u0131yla gezebilmek i\u00e7in,delegate referans\u0131m\u0131z \u00fczerinden GetInvocationList() metodunu kullan\u0131yoruz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        private void Form1_Load(object sender, EventArgs e)\r\n        {\r\n            IslemYapHandler delege = new IslemYapHandler(Topla);\r\n            delege += Carp;\r\n            Delegate&#x5B;] metodlar\u0131m\u0131z = delege.GetInvocationList();\r\n            foreach (Delegate item in metodlar\u0131m\u0131z)\r\n            {\r\n                MessageBox.Show(&quot;Metodumuzun ad\u0131 : &quot; + item.Method.Name);\r\n                MessageBox.Show(&quot;Metodumuzun geri d\u00f6n\u00fc\u015f tipi : &quot;+item.Method.ReturnType);\r\n                int sonuc = (int)item.DynamicInvoke(2, 3);\r\n                MessageBox.Show(&quot;\u015euanki metodun sonucu : &quot; + sonuc.ToString());\r\n            }\r\n        }\r\n<\/pre>\n<p>Yukar\u0131da g\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi delegemizin i\u00e7inde Topla ve Carp metodlar\u0131 vard\u0131r.Delegate&#8217;imizin referans\u0131na GetInvocationList() metodunu \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131m\u0131zda,geriye Delegate[] dizisi tipinden veriler d\u00f6n\u00fcyor ve ben bunlar\u0131 Delegate[] metodlar\u0131m\u0131z dizisine al\u0131yorum.Foreach d\u00f6ng\u00fcs\u00fcyle bu dizide dolas\u0131yorum.Bu dizideki metodlar\u0131n \u00f6zelliklerine(ad\u0131,gerid\u00f6n\u00fc\u015f de\u011feri v.s.) bakabiliyorum.Burada de\u011finmem gereken bir metod var.DynamicInvoke(),bu metod sayesinde o anda item referans\u0131na gelen metodu \u00e7al\u0131\u015ft\u0131rabiliyoruz.Params tipinden de\u011fi\u015fken ald\u0131\u011f\u0131 i\u00e7in metodlar\u0131n \u00e7al\u0131\u015ft\u0131raca\u011f\u0131 kadar parametre yaz\u0131yorum.<\/p>\n<p>Bu sayfada Delegate leri g\u00f6rm\u00fc\u015f olduk.Bir sonraki sayfada Event yap\u0131s\u0131ndan ve delegatlerle birlikte kullan\u0131m\u0131ndan bahsedece\u011fim.<br \/>\n<!--nextpage--><span style=\"color: #ff0000;\"><strong>Event<\/strong><\/span><br \/>\nTan\u0131m olarak \u00e7ok ayr\u0131nt\u0131ya girmek istemedi\u011fim bir konudur.Bir buton nesnesine farenin sol tu\u015fuyla t\u0131klad\u0131\u011f\u0131m\u0131zda,bir textbox nesnesine bir karakter girdi\u011fimizde ya da fareyle combobax daki elemanlardan birini se\u00e7ti\u011fimizde bir olay ger\u00e7ekle\u015fir.\u0130\u015fte bu durumlar\u0131n hepsi bir olayd\u0131r.<br \/>\n\u015eimdi formumuza bir Button nesnesi koyal\u0131m ve Click Event\u0131na a\u015fa\u011f\u0131daki \u015fekilde ula\u015fal\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        private void Form1_Load(object sender, EventArgs e)\r\n        {\r\n            button1.Click += new EventHandler(Tiklandi);\r\n        }\r\n        void Tiklandi(object sender, EventArgs e)\r\n        {\r\n\r\n        }\r\n<\/pre>\n<p>Click olay\u0131 Control s\u0131n\u0131f\u0131 i\u00e7inde tan\u0131mlanm\u0131\u015f bir Event t\u0131r.O s\u0131n\u0131f i\u00e7erisinde ayn\u0131 zamanda Click olay\u0131n\u0131n meydana gelip gelmedi\u011fi de s\u00fcrekli kontrol edilmektedir.E\u011fer o s\u0131n\u0131f, Click olay\u0131n\u0131n olu\u015ftu\u011funu tespit ederse , &#8221; += &#8221; ile o olaya ba\u011flad\u0131\u011f\u0131m metod \u00e7al\u0131\u015ft\u0131r\u0131lacakt\u0131r.Halbuki o s\u0131n\u0131f benim Click e ba\u011flad\u0131\u011f\u0131m bu s\u0131n\u0131ftaki metottan haberdar olmayacakt\u0131r.O s\u0131n\u0131f\u0131, bu s\u0131n\u0131ftaki metottan haberdar etmek i\u00e7in,bu s\u0131n\u0131ftaki metodu \u00e7al\u0131\u015ft\u0131rabilmek i\u00e7in yine o s\u0131n\u0131fta tan\u0131ml\u0131 olan delegeyi(EventHandler) kullan\u0131yoruz.<\/p>\n<p>Burada anlatmak istedi\u011fim pek ayd\u0131nlat\u0131c\u0131 ve hatta anla\u015f\u0131l\u0131r olmam\u0131\u015f olabilir.Bir sonraki sayfada as\u0131l mevzuya giriyorum.Bir Classtaki Event a, ba\u015fka bir Classtaki metodu ba\u011flayabilecek olan delegeyi olu\u015fturaca\u011f\u0131m.<br \/>\n<!--nextpage--><br \/>\nSizlere bu sayfada bic classtaki eventa,ba\u015fka bir classtaki metodu ba\u011flamay\u0131 g\u00f6sterece\u011fim.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class SayiKontrol\r\n    {\r\n        public delegate void SayiKontrolEtHandler();\r\n        public event SayiKontrolEtHandler SayiDurumu;\r\n        int sayi;\r\n        public int Sayi\r\n        {\r\n            get\r\n            {\r\n                return sayi;\r\n            }\r\n            set\r\n            {\r\n                sayi = value;\r\n                if (sayi&lt;10)\r\n                {\r\n                    \/\/ Olay \u00e7al\u0131\u015fs\u0131n\r\n                    \/\/ Ey olay, sana SayiKontrolEtHandler delegesinin ba\u011flad\u0131\u011f\u0131 metodu \u00e7al\u0131\u015ft\u0131r diyece\u011fiz :)\r\n                }\r\n            }\r\n        }\r\n    }\r\n<\/pre>\n<p>Yukar\u0131da g\u00f6rd\u00fc\u011f\u00fcn\u00fcz SayiKontrol s\u0131n\u0131f\u0131nda,geri d\u00f6n\u00fc\u015f tipi olmayan,parametre almayan metodlara uygun SayiKontrolEtHandler ad\u0131nda bir delege yaz\u0131lm\u0131\u015ft\u0131r.Ve bu delege tipinde,SayiDurumu ad\u0131nda bir event yaz\u0131lm\u0131\u015ft\u0131r.<br \/>\n<em><strong>UNUTMAYIN!!! : Eventlar\u0131n tipi,kendisine metod ba\u011flayacak delegenin tipinden olur.<\/strong><\/em><\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class SayiKontrol\r\n    {\r\n        public delegate void SayiKontrolEtHandler();\r\n        public event SayiKontrolEtHandler SayiDurumu;\r\n        int sayi;\r\n        public int Sayi\r\n        {\r\n            get\r\n            {\r\n                return sayi;\r\n            }\r\n            set\r\n            {\r\n                sayi = value;\r\n                if (sayi &lt; 10)\r\n                {\r\n                    if (SayiDurumu != null)\r\n                    {\r\n                        SayiDurumu();\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n<\/pre>\n<p>E\u011fer Sayi propertysine 10 dan k\u00fc\u00e7\u00fck bir say\u0131 girilirse SayiDurumu event\u0131 f\u0131rlat\u0131lacakt\u0131r.\u015eimdi SayiDurumu event\u0131na metod ba\u011flayal\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        private void Form1_Load(object sender, EventArgs e)\r\n        {\r\n            SayiKontrol nesne = new SayiKontrol();\r\n            nesne.SayiDurumu += new SayiKontrol.SayiKontrolEtHandler(kontrol);\r\n            nesne.Sayi = 77;\r\n        }\r\n        void kontrol()\r\n        {\r\n            MessageBox.Show(&quot;Sayi \u00f6zelli\u011fi 10 dan k\u00fc\u00e7\u00fck olamaz&quot;);\r\n        }\r\n<\/pre>\n<p>G\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi, SayiDurumu event\u0131na &#8221; += &#8221; operat\u00f6r\u00fc vas\u0131tas\u0131yla SayiKontrolEtHandler delegesi \u00fczerinden kontrol metodunu ba\u011flad\u0131m.E\u011fer bu program\u0131 \u00e7al\u0131\u015ft\u0131r\u0131rsan\u0131z kontrol metodu \u00e7al\u0131\u015ft\u0131r\u0131lmayacakt\u0131r.\u00c7\u00fcnk\u00fc,SayiDurumu event\u0131na SayiKontrolEtHandler delegesi \u00fczerinden kontrol metod ba\u011flan\u0131yor ve Sayi \u00f6zelli\u011fine 77 rakam\u0131 set edildi\u011finde,classtaki sayi field\u0131na gelen de\u011ferin 10 dan k\u00fc\u00e7\u00fck olmad\u0131\u011f\u0131n\u0131 bildi\u011fi i\u00e7in if scopelar\u0131 i\u00e7ine girmeden ak\u0131\u015f\u0131 durduruyor.Yani SayiDurumu event\u0131 \u015fu durumdayken at\u0131lm\u0131yor.E\u011fer 10 dan k\u00fc\u00e7\u00fck de\u011fer girersek kontrol metodu \u00e7al\u0131\u015facakt\u0131r.<\/p>\n<p>Bir sonraki yaz\u0131mda g\u00f6r\u00fc\u015fmek \u00fczere..<br \/>\n\u0130yi \u00e7al\u0131\u015fmalar.<\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content -->","protected":false},"excerpt":{"rendered":"<p>Bu yaz\u0131mda C#&#8217;ta Delegate(delege) yani temsilci ve Event yani olay konular\u0131ndan bahsedece\u011fim.Tabi \u015funu belirtmek istiyorum ki, yaz\u0131m\u0131 sayfalara b\u00f6lerek ad\u0131m ad\u0131m anlatmay\u0131 daha verimli buluyorum.Delegeler interface gibi tek ba\u015f\u0131na bir anlaml\u0131 konu de\u011fildir.Kafan\u0131zda bu&#46;&#46;&#46;<!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12],"tags":[169,62,170,171],"class_list":["post-283","post","type-post","status-publish","format-standard","hentry","category-c-sharp-c","tag-delegate","tag-event","tag-olay","tag-temsilciler"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/283","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/comments?post=283"}],"version-history":[{"count":0,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/283\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=283"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=283"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=283"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}