﻿
{"id":7136,"date":"2018-03-19T14:08:55","date_gmt":"2018-03-19T14:08:55","guid":{"rendered":"http:\/\/www.gencayyildiz.com\/blog\/?p=7136"},"modified":"2018-03-19T14:12:42","modified_gmt":"2018-03-19T14:12:42","slug":"c-7-1-default-literals-ozelligi","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/c-7-1-default-literals-ozelligi\/","title":{"rendered":"C# 7.1 &#8211; Default Literals \u00d6zelli\u011fi"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p>Hat\u0131rlarsan\u0131z C#&#8217;ta kulland\u0131\u011f\u0131m\u0131z yap\u0131lar i\u00e7erisinde de\u011fersel a\u00e7\u0131dan elimizdeki tiplerin varsay\u0131lan de\u011ferlerini <em>default<\/em> keyword\u00fcyle elde edebilmekteyiz. C# 7.1 s\u00fcr\u00fcm\u00fc \u00f6ncesine kadar default keyword\u00fcn\u00fc hangi tipe \u00f6zel olarak kullanaca\u011f\u0131m\u0131z\u0131 belirtmek zorundayd\u0131k lakin C# 7.1 s\u00fcr\u00fcm\u00fcyle bu zorunluluk ortadan kalkm\u0131\u015f bulunmakta ve compiler varsay\u0131lan de\u011ferini istedi\u011fimiz tipi tahmin etmektedir.<\/p>\n<p><strong>Peki bu i\u015flem nas\u0131l ger\u00e7ekle\u015fmektedir?<\/strong> sorusuna gelmeden \u00f6nce default keyword\u00fcn\u00fc a\u015fa\u011f\u0131da programatik olarak ele alal\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class Program\r\n    {\r\n        static void Main(string&#x5B;] args)\r\n        {\r\n            Metod(default(string), default(int), default(SqlConnection));\r\n            Console.Read();\r\n        }\r\n        public static void Metod(string a, int b, SqlConnection c)\r\n        {\r\n            \/\/\u0130\u015flemler...\r\n        }\r\n    }\r\n<\/pre>\n<p>Yukar\u0131daki kod blo\u011funu incelerseniz e\u011fer &#8220;Metod&#8221; isimli metodun parametrelerine ilgili tiplerin varsay\u0131lan de\u011ferlerini default keyword\u00fc ile g\u00f6ndermekteyiz. C# 7.1 versiyonundan \u00f6nce bu \u015fekilde ilgili parametreye de\u011feri g\u00f6nderirken default komutuna hangi tipin de\u011ferini istedi\u011fimizi belirtmek zorundayd\u0131k.<\/p>\n<p>&#8220;Ne olacak can\u0131m! o kadar da manuel belirtelim elimize mi yap\u0131\u015f\u0131r?&#8221; dedi\u011finizi duyar gibiyim. O halde a\u015fa\u011f\u0131daki metodu ele alal\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        public static void Metod(string a, int b, Func&lt;string, Func&lt;SqlCommand, Func&lt;int, bool, SqlCommand&gt;, bool&gt;, int&gt; c)\r\n        {\r\n            \/\/\u0130\u015flemler...\r\n        }\r\n<\/pre>\n<p>G\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi bu metotta parametremiz &#8220;Func&lt;string, Func&lt;SqlCommand, Func&lt;int, bool, SqlCommand&gt;, bool&gt;, int&gt;&#8221; \u015feklinde tan\u0131mlanm\u0131\u015ft\u0131r \ud83d\ude42 Tamam biraz abart\u0131 olabilir ama olur mu olur programlama d\u00fcnyas\u0131 \ud83d\ude09 Bu tarz durumlarda ilgili parametrenin default de\u011ferini isterken yeniden ayn\u0131 \u015fekilde tan\u0131mlamak i\u00e7in hal\u0131 dokur gibi bir zahmete katlanman\u0131n ne manas\u0131 var \ud83d\ude42<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        static void Main(string&#x5B;] args)\r\n        {\r\n            Metod(default(string), default(int), default(Func&lt;string, Func&lt;SqlCommand, Func&lt;int, bool, SqlCommand&gt;, bool&gt;, int&gt;));\r\n            Console.Read();\r\n        }\r\n<\/pre>\n<p>Oppsss\u00a0 \ud83d\ude2f<\/p>\n<p>\u0130\u015fte C# 7.1 ile default komutana gelen yenilikle bu tarz parametrik durumlarda varsay\u0131lan de\u011ferlerini talep etti\u011fimiz tipleri belirtme gere\u011fi duymadan direkt olarak istekte bulunabiliyoruz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n-- C# 7.1 Fark\u0131yla --\r\n    class Program\r\n    {\r\n        static void Main(string&#x5B;] args)\r\n        {\r\n            Metod(default, default, default);\r\n            Console.Read();\r\n        }\r\n        public static void Metod(string a, int b, Func&lt;string, Func&lt;SqlCommand, Func&lt;int, bool, SqlCommand&gt;, bool&gt;, int&gt; c)\r\n        {\r\n            \/\/\u0130\u015flemler...\r\n        }\r\n    }\r\n<\/pre>\n<p>Burada compiler, default de\u011ferinin verildi\u011fi parametrenin tipini tahmin etmekte ve arkaplanda default(T) \u015feklinde bir i\u015flevsellik g\u00f6stermektedir. Tipi tahmin edemedi\u011fi durumlarda sizden manuel olarak talep edecektir.<\/p>\n<p>Ayr\u0131ca \u015funu bilmenizi isterim ki, programlama d\u00fcnyas\u0131nda dillerin geli\u015fimi pratik ve i\u015flevsel olarak tek kullan\u0131mda \u00e7ok fonksiyonellik \u00fczerine do\u011fru bir e\u011filim g\u00f6stermektedir. Haliyle bu basit gelebilecek hatta \u00f6nemsenmeyecek gibi g\u00f6z\u00fcken yenilik asl\u0131nda bu dilin edebiyat\u0131n\u0131 yapanlar i\u00e7in do\u011fru bir imla getirmekte ve dilin esneklik ve zenginli\u011fine kafiye tad\u0131nda bir ilerleme kazand\u0131rmaktad\u0131r.<\/p>\n<p>Sonraki yaz\u0131lar\u0131mda g\u00f6r\u00fc\u015fmek \u00fczere&#8230;<br \/>\n\u0130yi \u00e7al\u0131\u015fmalar&#8230;<\/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, Hat\u0131rlarsan\u0131z C#&#8217;ta kulland\u0131\u011f\u0131m\u0131z yap\u0131lar i\u00e7erisinde de\u011fersel a\u00e7\u0131dan elimizdeki tiplerin varsay\u0131lan de\u011ferlerini default keyword\u00fcyle elde edebilmekteyiz. C# 7.1 s\u00fcr\u00fcm\u00fc \u00f6ncesine kadar default keyword\u00fcn\u00fc hangi tipe \u00f6zel olarak kullanaca\u011f\u0131m\u0131z\u0131 belirtmek zorundayd\u0131k lakin C# 7.1 s\u00fcr\u00fcm\u00fcyle&#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":3223,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12,2104],"tags":[2105,2106,2108,2107,2109],"class_list":["post-7136","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-c-sharp-c","category-c-7-1","tag-c-7-1","tag-c-7-1-default-literals","tag-c-7-1-yenilikleri","tag-default-literals","tag-default-literals-yeniligi"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/7136","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=7136"}],"version-history":[{"count":0,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/7136\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media\/3223"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=7136"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=7136"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=7136"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}