﻿
{"id":11031,"date":"2019-05-17T18:35:07","date_gmt":"2019-05-17T18:35:07","guid":{"rendered":"https:\/\/www.gencayyildiz.com\/blog\/?p=11031"},"modified":"2019-05-17T18:35:07","modified_gmt":"2019-05-17T18:35:07","slug":"c-8-0-default-implementations-in-interfaces","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/c-8-0-default-implementations-in-interfaces\/","title":{"rendered":"C# 8.0 &#8211; Default Implementations In Interfaces"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba;<\/p>\n<p>Bir s\u0131n\u0131f\u0131n imzas\u0131 olan ve i\u00e7erisinde tan\u0131mlanm\u0131\u015f olan \u00fcyeleri ilgili s\u0131n\u0131fa implement etmeye zorlayan interface yap\u0131lar\u0131 C# 8.0 ile radikal bir yenilikle kar\u015f\u0131m\u0131za gelmi\u015f bulunmaktad\u0131r. Bu i\u00e7eri\u011fimizde C# 8.0 ile interfacelere \u00f6zel gelen Default Implementations \u00f6zelli\u011fi \u00fczerine konu\u015fuyor olaca\u011f\u0131z.<\/p>\n<p>Interface; i\u00e7erisine tan\u0131mlayaca\u011f\u0131m\u0131z ve kendisinden t\u00fcretilecek olan s\u0131n\u0131flarda uygulataca\u011f\u0131m\u0131z memberlar\u0131n sade ve sadece imzas\u0131n\u0131 tutmakta, g\u00f6vdelerini derived classlarda olu\u015fturmaya zorlamaktad\u0131r. Bu durum interface&#8217;in bir s\u0131n\u0131f\u0131n imzas\u0131 olmas\u0131n\u0131 sa\u011flayan temel \u00e7al\u0131\u015fma yap\u0131lanmas\u0131n\u0131n ta kendisidir.<\/p>\n<p>C# 8.0 ile Default Implementations \u00f6zelli\u011fi ile art\u0131k interface yap\u0131lar\u0131nda istenilen \u00fcyelerin g\u00f6vdeleri olu\u015fturulabilmekte ve kendisinden kal\u0131t\u0131m alan nesneler \u00fczerinde ilgili \u00fcye \u00e7al\u0131\u015ft\u0131r\u0131labilmektedir.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    interface IExample\r\n    {\r\n        void X();\r\n    }\r\n<\/pre>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class ExampleClass : IExample\r\n    {\r\n        public void X()\r\n        {\r\n            Console.WriteLine(&quot;X metodu.&quot;);\r\n        }\r\n    }\r\n<\/pre>\n<p>Yukar\u0131daki \u00f6rnek kod bloklar\u0131n\u0131 incelerseniz e\u011fer; &#8220;IExample&#8221; interface&#8217;inden t\u00fcretilen &#8220;ExampleClass&#8221; class\u0131nda interface i\u00e7erisindeki metot zoraki uygulanmaktad\u0131r. Evet&#8230; Bu, bu g\u00fcne kadar kulland\u0131\u011f\u0131m\u0131z ve bildi\u011fimiz bir durumdur.<\/p>\n<p>E\u011fer ki;<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    interface IExample\r\n    {\r\n        void X();\r\n        void Y()\r\n        {\r\n            Console.WriteLine(&quot;Y metodu.&quot;);\r\n        }\r\n    }\r\n<\/pre>\n<p>\u015feklinde bir in\u015fada bulunursan\u0131z C# 8.0 versiyonu sayesinde bir m\u00fcddet al\u0131\u015fmam\u0131z\u0131n zahmetli olaca\u011f\u0131 bu tan\u0131mlamay\u0131 yapabilirsiniz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class ExampleClass : IExample\r\n    {\r\n        public void X()\r\n        {\r\n            Console.WriteLine(&quot;X metodu.&quot;);\r\n        }\r\n    }\r\n<\/pre>\n<p>Default Implementations olarak tan\u0131mlanan &#8220;Y&#8221; metodu g\u00f6vdesi interface&#8217;de mevcut oldu\u011fundan dolay\u0131 ilgili interfaceden t\u00fcretilen classlarda implement edilmeye zorlanmayacakt\u0131r. Bu \u015fekilde bir tan\u0131mlama interface referans\u0131 \u00fczerinden direkt olarak eri\u015filebilir bir \u015fekilde public \u00f6zelli\u011fi g\u00f6sterecektir. Ayriyetten bu \u00fcyenin ba\u015f\u0131nda istenilen eri\u015fim belirleyicisi kullan\u0131labilir.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        static void Main(string&#x5B;] args)\r\n        {\r\n            IExample x = new ExampleClass();\r\n            x.Y();\r\n        }\r\n<\/pre>\n<p>Ayriyetten a\u015fa\u011f\u0131daki gibi static keyword\u00fc ile i\u015faretleyip ilgili member\u0131 static belle\u011fe y\u00fckleyebilir ve interface tipi \u00fczerinden eri\u015febiliriz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    interface IExample\r\n    {\r\n        void X();\r\n        static void Y()\r\n        {\r\n            Console.WriteLine(&quot;Y metodu.&quot;);\r\n        }\r\n    }\r\n<\/pre>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        static void Main(string&#x5B;] args)\r\n        {\r\n            IExample.Y();\r\n        }\r\n<\/pre>\n<p>\u015eimdi bu \u00f6zelli\u011fi g\u00f6rd\u00fckten sonra akl\u0131n\u0131za soyut s\u0131n\u0131flar gelmi\u015f olabilir ve &#8216;<em style=\"font-size:14px;\">abstract class&#8217;lar bu ve buna benzer i\u015flemler i\u00e7in olu\u015fturulmu\u015f de\u011filler mi?<\/em>&#8216;, &#8216;<em style=\"font-size:14px;\">interface&#8217;ler, class&#8217;lar gibi davran\u0131yorsa e\u011fer \u00e7oklu kal\u0131t\u0131ma geri d\u00f6nm\u00fcyor muyuz?<\/em>&#8216; ya da &#8216;<em style=\"font-size:14px;\">sanki art\u0131k interface&#8217;in normal s\u0131n\u0131ftan bir fark\u0131 kalmad\u0131<\/em>&#8216; vs. \u015feklinde sorular sorabilirsiniz.<\/p>\n<p>\u015eahsen bu \u00f6zelli\u011fin geni\u015f stratejik yap\u0131lanmalarda tarifi olamayacak kritik durumlar\u0131 dolayl\u0131 ve maliyetli y\u00f6ntemlerle ge\u00e7i\u015ftirmektense, pratik ve etkili bir \u00e7\u00f6z\u00fcm sunmakta oldu\u011funu d\u00fc\u015f\u00fcn\u00fcyorum. Tabi ki de bu \u015fekilde \u00e7eli\u015fkilere d\u00fc\u015f\u00fcn\u00fclmesinide do\u011fal g\u00f6r\u00fcyorum. Nihayetinde C# programlama dili burada gelen sorumlulu\u011fu par\u00e7a par\u00e7a \u00fcstlenen farkl\u0131 enstr\u00fcnmanlar(Abstract Class, Interface) bar\u0131nd\u0131rmaktad\u0131r. Birde bunun yan\u0131nda bu \u00f6zellik eklenmi\u015ftir. Dolay\u0131s\u0131yla sahada operasyonel durumlarda Default Implementation&#8217;\u0131n m\u0131 yoksa Abstract Class yap\u0131s\u0131n\u0131n m\u0131 kullan\u0131laca\u011f\u0131na dair tercih m\u00fc\u015fk\u00fclat\u0131n\u0131n ya\u015fanabilmesi y\u00fcksek ihtimaldir. T\u00fcm bunlar\u0131n yan\u0131nda C#&#8217;\u0131n mevcut haliyle \u00f6\u011frenilmesi zor bir dil haline gelmi\u015f olmas\u0131da cabas\u0131d\u0131r.<\/p>\n<p>\u0130lgilenenlerin faydalanmas\u0131 dile\u011fiyle&#8230;<br \/>\nSonraki 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; Bir s\u0131n\u0131f\u0131n imzas\u0131 olan ve i\u00e7erisinde tan\u0131mlanm\u0131\u015f olan \u00fcyeleri ilgili s\u0131n\u0131fa implement etmeye zorlayan interface yap\u0131lar\u0131 C# 8.0 ile radikal bir yenilikle kar\u015f\u0131m\u0131za gelmi\u015f bulunmaktad\u0131r. Bu i\u00e7eri\u011fimizde C# 8.0 ile interfacelere \u00f6zel gelen&#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":11028,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2857],"tags":[2858,2864,2863],"class_list":["post-11031","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-c-8-0","tag-c-8-0","tag-c-8-0-interface","tag-default-implementations-in-interfaces"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/11031","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=11031"}],"version-history":[{"count":23,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/11031\/revisions"}],"predecessor-version":[{"id":11054,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/11031\/revisions\/11054"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media\/11028"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=11031"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=11031"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=11031"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}