﻿
{"id":4257,"date":"2016-05-02T01:01:02","date_gmt":"2016-05-02T01:01:02","guid":{"rendered":"http:\/\/www.gencayyildiz.com\/blog\/?p=4257"},"modified":"2016-05-02T01:01:03","modified_gmt":"2016-05-02T01:01:03","slug":"fluent-interface-nedir-nasil-kullanilir","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/fluent-interface-nedir-nasil-kullanilir\/","title":{"rendered":"Fluent Interface Nedir? Nas\u0131l Kullan\u0131l\u0131r?"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p>Sizlere aslen bir Design Pattern olan Fluent Interface yap\u0131s\u0131ndan bahsedece\u011fim. Fluent, &#8220;ak\u0131c\u0131&#8221; anlam\u0131na gelen bir kelimedir. Yani anlayaca\u011f\u0131n\u0131z kod yazarken belli ba\u015fl\u0131 durumlarda daha net ve ak\u0131c\u0131 kod yazmam\u0131z\u0131 sa\u011flayan bir tasar\u0131m desenini ele al\u0131yor olaca\u011f\u0131z.<\/p>\n<p>As\u0131l mevzu, bir nesnenin metodlar\u0131n\u0131n ayn\u0131 t\u00fcrde bir nesne geri d\u00f6nd\u00fcrd\u00fc\u011f\u00fc bir modeldir. Tabi ki de bu nesne, o anki &#8220;this&#8221; keyword\u00fc ile ifade etti\u011fimiz nesnenin ta kendisi olacakt\u0131r.<\/p>\n<p>\u015eimdi a\u015fa\u011f\u0131da Fluent Interface Design Pattern&#8217;i uygulamad\u0131\u011f\u0131m\u0131z s\u0131n\u0131f\u0131m\u0131z mevcuttur.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class Asker\r\n    {\r\n        public void Kos() =&gt; Console.WriteLine(&quot;Asker d\u00fcz ko\u015fuyor...&quot;);\r\n        public void SagaKos() =&gt; Console.WriteLine(&quot;Asker sa\u011fa ko\u015fuyor...&quot;);\r\n        public void SolaKos() =&gt; Console.WriteLine(&quot;Asker sola ko\u015fuyor...&quot;);\r\n        public void Dur() =&gt; Console.WriteLine(&quot;Asker duruyor...&quot;);\r\n        public void GeriGel() =&gt; Console.WriteLine(&quot;Asker geri geliyor...&quot;);\r\n    }\r\n<\/pre>\n<p>Asker s\u0131n\u0131f\u0131n\u0131 kullan\u0131rsak e\u011fer;<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        static void Main(string&#x5B;] args)\r\n        {\r\n            Asker asker = new Asker();\r\n            asker.Kos();\r\n            asker.SagaKos();\r\n            asker.Kos();\r\n            asker.Dur();\r\n            asker.GeriGel();\r\n            asker.SolaKos();\r\n            asker.Kos();\r\n            Console.Read();\r\n        }\r\n<\/pre>\n<p>g\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi referans \u00fczerinde olduk\u00e7a maliyetli bir kod yazmaktay\u0131z.<\/p>\n<p>\u015eimdi bu tarz bir durumda Fluent Interface&#8217;ini uygularsak konuyu daha net a\u00e7\u0131klayaca\u011f\u0131na inanmaktay\u0131m.<br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/fluent-interface-nedir-nasil-kullanilir\/fluent-interface-nedir-nasil-kullanilir\/\" rel=\"attachment wp-att-4258\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-4258\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/05\/Fluent-Interface-Nedir-Nas\u0131l-Kullan\u0131l\u0131r.jpg\" alt=\"Fluent Interface Nedir? Nas\u0131l Kullan\u0131l\u0131r?\" width=\"820\" height=\"339\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/05\/Fluent-Interface-Nedir-Nas\u0131l-Kullan\u0131l\u0131r.jpg 820w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/05\/Fluent-Interface-Nedir-Nas\u0131l-Kullan\u0131l\u0131r-300x124.jpg 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/05\/Fluent-Interface-Nedir-Nas\u0131l-Kullan\u0131l\u0131r-768x318.jpg 768w\" sizes=\"auto, (max-width: 820px) 100vw, 820px\" \/><\/a><br \/>\nClass diyagram\u0131nda g\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi IDavranislar Interface&#8217;i taraf\u0131ndan Asker s\u0131n\u0131f\u0131na uygulanan t\u00fcm metodlar geriye IDavranislar nesnesini d\u00f6nd\u00fcrmektedir. Yani <em>Method Chaining &#8211; Zincirleme Y\u00f6ntemi<\/em> dedi\u011fimiz manevray\u0131 ger\u00e7ekle\u015ftirmektedirler.(<em>Bir s\u0131n\u0131f i\u00e7erisindeki herhangi bir metodun i\u015flevi sonucunda ayn\u0131 s\u0131n\u0131f tipinde nesne geri d\u00f6nd\u00fcrmesine Method Chaining(Zincirleme Y\u00f6ntemi) denir.<\/em>)<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    interface IDavranislar\r\n    {\r\n        IDavranislar Kos();\r\n        IDavranislar SagaKos();\r\n        IDavranislar SolaKos();\r\n        IDavranislar Dur();\r\n        IDavranislar GeriGel();\r\n    }\r\n    class Asker : IDavranislar\r\n    {\r\n        public IDavranislar Kos()\r\n        {\r\n            Console.WriteLine(&quot;Asker d\u00fcz ko\u015fuyor...&quot;);\r\n            return this;\r\n        }\r\n        public IDavranislar SagaKos()\r\n        {\r\n            Console.WriteLine(&quot;Asker sa\u011fa ko\u015fuyor...&quot;);\r\n            return this;\r\n        }\r\n        public IDavranislar SolaKos()\r\n        {\r\n            Console.WriteLine(&quot;Asker sola ko\u015fuyor...&quot;);\r\n            return this;\r\n        }\r\n        public IDavranislar Dur()\r\n        {\r\n            Console.WriteLine(&quot;Asker duruyor...&quot;);\r\n            return this;\r\n        }\r\n        public IDavranislar GeriGel()\r\n        {\r\n            Console.WriteLine(&quot;Asker geri geliyor...&quot;);\r\n            return this;\r\n        }\r\n    }\r\n<\/pre>\n<p>G\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi her bir metod geriye IDavranislar aray\u00fcz\u00fcn\u00fc d\u00f6nd\u00fcrmektedir. Ee haliyle Asker s\u0131n\u0131f\u0131m\u0131z\u0131 da IDavranislar Interface&#8217;inden t\u00fcretti\u011fimiz i\u00e7in &#8220;this&#8221; keyword\u00fc ile geri o anki nesneyi d\u00f6nd\u00fcrebilmekteyiz.<\/p>\n<p>Bu tasar\u0131n\u0131n kullan\u0131m\u0131n\u0131 a\u015fa\u011f\u0131daki gibi ger\u00e7ekle\u015ftirebilmekteyiz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        static void Main(string&#x5B;] args)\r\n        {\r\n            Asker asker = new Asker();\r\n            asker.Kos()\r\n                .SagaKos()\r\n                .Kos()\r\n                .Dur()\r\n                .GeriGel()\r\n                .SolaKos()\r\n                .Kos();\r\n            Console.Read();\r\n        }\r\n<\/pre>\n<p>\u00c7\u0131kt\u0131 olarak iki kullan\u0131m tarz\u0131da ayn\u0131 sonucu verecektir.<\/p>\n<p>Fluent Interface g\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi bu tarz uygulamalarda pratiklik kazand\u0131rsada di\u011fer yandan semantik olarak sak\u0131ncal\u0131d\u0131r. \u00c7\u00fcnk\u00fc ilgili yap\u0131 bir API olarak size sunulmu\u015f olabilir. Haliyle nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 teknik olarak bilmiyorsan\u0131z e\u011fer size her defas\u0131nda var olan instance\u0131 m\u0131 yoksa yenisini mi d\u00f6nd\u00fc\u011f\u00fcn\u00fc direkt olarak bilemezsiniz. Haliyle yaz\u0131lan kodun etkisini anlamland\u0131rabilmek i\u00e7in ek olarak \u00e7aba sarf etmeniz gerekecektir. Bunun yan\u0131nda, yazd\u0131\u011f\u0131n\u0131z kodu ba\u015fkas\u0131n\u0131n okuyabilmesi ve ne yapmaya \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131z\u0131 anlamas\u0131 g\u00fc\u00e7le\u015febilir.<\/p>\n<p>\u015eimdi Fluent Interface Design Pattern&#8217;nini geni\u015fletmek maksatl\u0131 bir \u00f6rnek daha yapal\u0131m.<br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/fluent-interface-nedir-nasil-kullanilir\/fluent-interface-nedir-nasil-kullanilir-2\/\" rel=\"attachment wp-att-4266\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-4266\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/05\/Fluent-Interface-Nedir-Nas\u0131l-Kullan\u0131l\u0131r-1.jpg\" alt=\"Fluent Interface Nedir? Nas\u0131l Kullan\u0131l\u0131r?\" width=\"847\" height=\"489\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/05\/Fluent-Interface-Nedir-Nas\u0131l-Kullan\u0131l\u0131r-1.jpg 847w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/05\/Fluent-Interface-Nedir-Nas\u0131l-Kullan\u0131l\u0131r-1-300x173.jpg 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/05\/Fluent-Interface-Nedir-Nas\u0131l-Kullan\u0131l\u0131r-1-768x443.jpg 768w\" sizes=\"auto, (max-width: 847px) 100vw, 847px\" \/><\/a><\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    interface ITank\r\n    {\r\n        ITank SetTankAdi(string _TankAdi);\r\n        ITank SetSeviye(Seviye _Seviye);\r\n        ITank SetKoordinat(Koordinat _Koordinat);\r\n        ITank SetTankResmi(string _TankResmi);\r\n        ITank SetToplamPuan(double _ToplamPuan);\r\n        void Yazdir();\r\n    }\r\n    enum Seviye\r\n    {\r\n        CokKolay,\r\n        Kolay,\r\n        Normal,\r\n        Zor,\r\n        CokZor\r\n    }\r\n    struct Koordinat\r\n    {\r\n        public int X { get; set; }\r\n        public int Y { get; set; }\r\n    }\r\n    class Tank : ITank\r\n    {\r\n        string _TankAdi;\r\n        Seviye _Seviye;\r\n        Koordinat _Koordinat;\r\n        string _TankResmi;\r\n        double _ToplamPuan;\r\n\r\n        public void Yazdir()\r\n        {\r\n            Console.WriteLine(\r\n                $@&quot;Tank Ad\u0131 : {_TankAdi}\r\n                   Seviye : {_Seviye}\r\n                   Koordinat : {_Koordinat.X } x {_Koordinat.Y}\r\n                   Tank Resmi : {_TankResmi}\r\n                   Toplam Puan : {_ToplamPuan}&quot;);\r\n        }\r\n\r\n        public ITank SetTankAdi(string _TankAdi)\r\n        {\r\n            this._TankAdi = _TankAdi;\r\n            return this;\r\n        }\r\n\r\n        public ITank SetSeviye(Seviye _Seviye)\r\n        {\r\n            this._Seviye = _Seviye;\r\n            return this;\r\n        }\r\n\r\n        public ITank SetKoordinat(Koordinat _Koordinat)\r\n        {\r\n            this._Koordinat = _Koordinat;\r\n            return this;\r\n        }\r\n\r\n        public ITank SetTankResmi(string _TankResmi)\r\n        {\r\n            this._TankResmi = _TankResmi;\r\n            return this;\r\n        }\r\n\r\n        public ITank SetToplamPuan(double _ToplamPuan)\r\n        {\r\n            this._ToplamPuan = _ToplamPuan;\r\n            return this;\r\n        }\r\n    }\r\n<\/pre>\n<p>G\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi bu \u00f6rne\u011fimizde de metodlar arac\u0131l\u0131\u011f\u0131yla ilgili nesne \u00fczerindeki fieldlara veriler set edilmektedir.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        static void Main(string&#x5B;] args)\r\n        {\r\n            Tank tank = new Tank();\r\n            tank.SetSeviye(Seviye.Kolay)\r\n                .SetKoordinat(new Koordinat() { X = 3, Y = 5 })\r\n                .SetTankAdi(&quot;Gen\u00e7ay&quot;)\r\n                .SetTankResmi(&quot;gencay.png&quot;)\r\n                .SetToplamPuan(145)\r\n                .Yazdir();\r\n\r\n            Console.Read();\r\n        }\r\n<\/pre>\n<p>\u00c7\u0131kt\u0131 olarak a\u015fa\u011f\u0131daki ekran g\u00f6r\u00fcnt\u00fcs\u00fc al\u0131nmaktad\u0131r.<br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/fluent-interface-nedir-nasil-kullanilir\/fluent-interface-nedir-nasil-kullanilir-3\/\" rel=\"attachment wp-att-4268\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-4268\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/05\/Fluent-Interface-Nedir-Nas\u0131l-Kullan\u0131l\u0131r-2.jpg\" alt=\"Fluent Interface Nedir? Nas\u0131l Kullan\u0131l\u0131r?\" width=\"316\" height=\"179\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/05\/Fluent-Interface-Nedir-Nas\u0131l-Kullan\u0131l\u0131r-2.jpg 316w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/05\/Fluent-Interface-Nedir-Nas\u0131l-Kullan\u0131l\u0131r-2-300x170.jpg 300w\" sizes=\"auto, (max-width: 316px) 100vw, 316px\" \/><\/a><\/p>\n<p>Dilerseniz elimizdeki \u00f6rnekleri birazdaha geni\u015fletelim.<br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/fluent-interface-nedir-nasil-kullanilir\/fluent-interface-nedir-nasil-kullanilir-4\/\" rel=\"attachment wp-att-4270\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-4270\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/05\/Fluent-Interface-Nedir-Nas\u0131l-Kullan\u0131l\u0131r-3.jpg\" alt=\"Fluent Interface Nedir? Nas\u0131l Kullan\u0131l\u0131r?\" width=\"497\" height=\"523\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/05\/Fluent-Interface-Nedir-Nas\u0131l-Kullan\u0131l\u0131r-3.jpg 497w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/05\/Fluent-Interface-Nedir-Nas\u0131l-Kullan\u0131l\u0131r-3-285x300.jpg 285w\" sizes=\"auto, (max-width: 497px) 100vw, 497px\" \/><\/a><\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    interface IYetenek\r\n    {\r\n        IYetenek SetYetenek(Yetenek _Yetenek);\r\n        IYetenek Yazdir(Yetenek _Yetenek);\r\n    }\r\n    class Yetenek\r\n    {\r\n        public string _Yetenek { get; set; }\r\n        public void Yazdir()\r\n        {\r\n            Console.WriteLine(_Yetenek);\r\n        }\r\n    }\r\n    class Tank : IYetenek\r\n    {\r\n        List&lt;Yetenek&gt; Yetenekler = new List&lt;Yetenek&gt;();\r\n\r\n        public IYetenek SetYetenek(Yetenek _Yetenek)\r\n        {\r\n            if (!Yetenekler.Contains(_Yetenek))\r\n            {\r\n                Yetenekler.Add(_Yetenek);\r\n            }\r\n\r\n            return this;\r\n        }\r\n\r\n        public IYetenek Yazdir(Yetenek _Yetenek)\r\n        {\r\n            var Yetenek = Yetenekler.Find(y =&gt; y == _Yetenek);\r\n            Yetenek.Yazdir();\r\n            return this;\r\n        }\r\n    }\r\n<\/pre>\n<p>Bu \u00f6rne\u011fin kullan\u0131m\u0131,<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        static void Main(string&#x5B;] args)\r\n        {\r\n            Yetenek Hucum = new Yetenek { _Yetenek = &quot;H\u00fccummmmmma kalk\u0131yoruz, Allah AlllllAh&quot; };\r\n            Yetenek Ates = new Yetenek { _Yetenek = &quot;Ates edildi...&quot; };\r\n            Yetenek Kac = new Yetenek { _Yetenek = &quot;Ka\u00e7 ka\u00e7\u00e7\u00e7&quot; };\r\n            Yetenek FuzeKalkanlariDevredemi = new Yetenek { _Yetenek = &quot;hee devrede devrede&quot; };\r\n\r\n\r\n            Tank tank = new Tank();\r\n            tank.SetYetenek(Hucum)\r\n                .SetYetenek(Ates)\r\n                .SetYetenek(Kac)\r\n                .Yazdir(Kac)\r\n                .Yazdir(Hucum)\r\n                .SetYetenek(FuzeKalkanlariDevredemi)\r\n                .Yazdir(Ates)\r\n                .Yazdir(FuzeKalkanlariDevredemi);\r\n            Console.Read();\r\n        }\r\n<\/pre>\n<p>\u015feklindedir. G\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi bu tarz bir tasar\u0131da, farkl\u0131 ad\u0131mlarda farkl\u0131 kabiliyetler ilgili nesneye entegre edilebilmektedir.<br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/fluent-interface-nedir-nasil-kullanilir\/fluent-interface-nedir-nasil-kullanilir-5\/\" rel=\"attachment wp-att-4272\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-4272\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/05\/Fluent-Interface-Nedir-Nas\u0131l-Kullan\u0131l\u0131r-4.jpg\" alt=\"Fluent Interface Nedir? Nas\u0131l Kullan\u0131l\u0131r?\" width=\"481\" height=\"166\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/05\/Fluent-Interface-Nedir-Nas\u0131l-Kullan\u0131l\u0131r-4.jpg 481w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/05\/Fluent-Interface-Nedir-Nas\u0131l-Kullan\u0131l\u0131r-4-300x104.jpg 300w\" sizes=\"auto, (max-width: 481px) 100vw, 481px\" \/><\/a><\/p>\n<p>\u015eimdi son kez yukar\u0131daki \u00f6rne\u011fin akabinde Extension metodlarla Fluent Interface desenini ele alal\u0131m.<br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/fluent-interface-nedir-nasil-kullanilir\/fluent-interface-nedir-nasil-kullanilir-6\/\" rel=\"attachment wp-att-4274\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-4274\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/05\/Fluent-Interface-Nedir-Nas\u0131l-Kullan\u0131l\u0131r-5.jpg\" alt=\"Fluent Interface Nedir? Nas\u0131l Kullan\u0131l\u0131r?\" width=\"492\" height=\"561\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/05\/Fluent-Interface-Nedir-Nas\u0131l-Kullan\u0131l\u0131r-5.jpg 492w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/05\/Fluent-Interface-Nedir-Nas\u0131l-Kullan\u0131l\u0131r-5-263x300.jpg 263w\" sizes=\"auto, (max-width: 492px) 100vw, 492px\" \/><\/a><\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    interface IYetenek\r\n    {\r\n        IYetenek SetYetenek(Yetenek _Yetenek);\r\n        IYetenek Yazdir(Yetenek _Yetenek);\r\n    }\r\n    class Yetenek\r\n    {\r\n        public string _Yetenek { get; set; }\r\n        public void Yazdir(string _TankAdi)\r\n        {\r\n            Console.WriteLine(_TankAdi + &quot; &quot; + _Yetenek);\r\n        }\r\n    }\r\n    class Tank : IYetenek\r\n    {\r\n        string _TankAdi;\r\n        List&lt;Yetenek&gt; Yetenekler = new List&lt;Yetenek&gt;();\r\n\r\n        public IYetenek SetYetenek(Yetenek _Yetenek)\r\n        {\r\n            if (!Yetenekler.Contains(_Yetenek))\r\n            {\r\n                Yetenekler.Add(_Yetenek);\r\n            }\r\n\r\n            return this;\r\n        }\r\n\r\n        public Tank(string _TankAdi)\r\n        {\r\n            this._TankAdi = _TankAdi;\r\n        }\r\n\r\n        public IYetenek Yazdir(Yetenek _Yetenek)\r\n        {\r\n            var Yetenek = Yetenekler.Find(y =&gt; y == _Yetenek);\r\n            Yetenek.Yazdir(_TankAdi);\r\n            return this;\r\n        }\r\n    }\r\n<\/pre>\n<p>Extension metodlar\u0131m\u0131z\u0131 bar\u0131nd\u0131ran Extension ismini verdi\u011fim s\u0131n\u0131f\u0131m\u0131z;<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    static class Extension\r\n    {\r\n        static public IEnumerable&lt;Tank&gt; SetYetenek(this IEnumerable&lt;Tank&gt; list, Yetenek _Yetenek)\r\n        {\r\n            list.ToList().ForEach(y =&gt; y.SetYetenek(_Yetenek));\r\n            return list;\r\n        }\r\n        static public IEnumerable&lt;Tank&gt; Yazdir(this IEnumerable&lt;Tank&gt; list, Yetenek _Yetenek)\r\n        {\r\n            list.ToList().ForEach(y =&gt; y.Yazdir(_Yetenek));\r\n            return list;\r\n        }\r\n    }\r\n<\/pre>\n<p>Kullan\u0131m\u0131;<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        static void Main(string&#x5B;] args)\r\n        {\r\n            Yetenek Hucum = new Yetenek { _Yetenek = &quot;H\u00fccummmmmma kalk\u0131yoruz, Allah AlllllAh&quot; };\r\n            Yetenek Ates = new Yetenek { _Yetenek = &quot;Ates edildi...&quot; };\r\n            Yetenek Kac = new Yetenek { _Yetenek = &quot;Ka\u00e7 ka\u00e7\u00e7\u00e7&quot; };\r\n            Yetenek FuzeKalkanlariDevredemi = new Yetenek { _Yetenek = &quot;hee devrede devrede&quot; };\r\n\r\n            Tank t1 = new Tank(&quot;Gen\u00e7ay Tank&quot;);\r\n            Tank t2 = new Tank(&quot;G\u00f6kt\u00fcrk Tank&quot;);\r\n            Tank t3 = new Tank(&quot;Tank Tank&quot;);\r\n            Tank t4 = new Tank(&quot;\u00c7orum Tank&quot;);\r\n            Tank t5 = new Tank(&quot;Tank&quot;);\r\n            List&lt;Tank&gt; Tanklar = new List&lt;Tank&gt; { t1, t2, t3, t4, t5 };\r\n            Tanklar.SetYetenek(Hucum)\r\n                .SetYetenek(FuzeKalkanlariDevredemi)\r\n                .Yazdir(Hucum)\r\n                .SetYetenek(Ates)\r\n                .SetYetenek(Kac)\r\n                .Yazdir(Ates)\r\n                .Yazdir(Kac);\r\n            Console.Read();\r\n        }\r\n<\/pre>\n<p>\u00d6rne\u011fimizde g\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi\u00a0IEnumerable&lt;Tank&gt; tipinden koleksiyon \u00fczerinde i\u015flemler yapmam\u0131z\u0131 sa\u011flayan iki adet Extension metod olu\u015fturduk. Kullan\u0131m\u0131ndan da g\u00f6rece\u011finiz gibi elimizdeki birden fazla mevcut tank \u00fczerine bu Extension metodlar arac\u0131l\u0131\u011f\u0131yla yeni yetenekler entegre edebilmekte ve var olan\u0131 yazd\u0131rabilmekteyiz.<\/p>\n<p><a href=\"http:\/\/www.gencayyildiz.com\/blog\/fluent-interface-nedir-nasil-kullanilir\/fluent-interface-nedir-nasil-kullanilir-7\/\" rel=\"attachment wp-att-4275\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/05\/Fluent-Interface-Nedir-Nas\u0131l-Kullan\u0131l\u0131r-6.jpg\" alt=\"Fluent Interface Nedir? Nas\u0131l Kullan\u0131l\u0131r?\" width=\"637\" height=\"443\" class=\"aligncenter size-full wp-image-4275\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/05\/Fluent-Interface-Nedir-Nas\u0131l-Kullan\u0131l\u0131r-6.jpg 637w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/05\/Fluent-Interface-Nedir-Nas\u0131l-Kullan\u0131l\u0131r-6-300x209.jpg 300w\" sizes=\"auto, (max-width: 637px) 100vw, 637px\" \/><\/a><\/p>\n<p>Okudu\u011funuz i\u00e7in te\u015fekk\u00fcr ederim&#8230;<\/p>\n<p>Sonraki yaz\u0131lar\u0131mda g\u00f6r\u00fc\u015fmek \u00fczere&#8230;<\/p>\n<p>\u0130yi \u00e7al\u0131\u015fmalar&#8230;<\/p>\n<p>Kaynak : http:\/\/www.buraksenyurt.com\/post\/Fluent-Interface-Nedir.aspx<\/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>Merhaba, Sizlere aslen bir Design Pattern olan Fluent Interface yap\u0131s\u0131ndan bahsedece\u011fim. Fluent, &#8220;ak\u0131c\u0131&#8221; anlam\u0131na gelen bir kelimedir. Yani anlayaca\u011f\u0131n\u0131z kod yazarken belli ba\u015fl\u0131 durumlarda daha net ve ak\u0131c\u0131 kod yazmam\u0131z\u0131 sa\u011flayan bir tasar\u0131m desenini&#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":3014,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[153],"tags":[750,232,1172,1173,1174,1175,1176],"class_list":["post-4257","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-design-pattern","tag-design-pattern","tag-extension","tag-fluent-interface","tag-fluent-interface-design-pattern","tag-fluent-interface-tasarim-deseni","tag-method-chaining","tag-zincirleme-yontemi"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/4257","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=4257"}],"version-history":[{"count":0,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/4257\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media\/3014"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=4257"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=4257"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=4257"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}