﻿
{"id":7792,"date":"2018-04-26T21:17:19","date_gmt":"2018-04-26T21:17:19","guid":{"rendered":"http:\/\/www.gencayyildiz.com\/blog\/?p=7792"},"modified":"2018-04-26T21:19:33","modified_gmt":"2018-04-26T21:19:33","slug":"c-7-2-ref-readonly-returns","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/c-7-2-ref-readonly-returns\/","title":{"rendered":"C# 7.2 &#8211; Ref Readonly Returns"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p>Fark\u0131nda m\u0131s\u0131n\u0131z bilmem ama her .NET yeniliklerinde metotlar\u0131n d\u00f6n\u00fc\u015f tiplerine ve parametrelerine bir m\u00fcdahalede bulunulmakta ve \u00f6zellikle referanslar arac\u0131l\u0131\u011f\u0131yla yap\u0131lan i\u015flemlere b\u00fcy\u00fck titizlik g\u00f6sterilmektedir. Bu de\u011ferlendirmeye istinaden en son .NET g\u00fcncellemesi ile sunulan C# 7.2 s\u00fcr\u00fcm\u00fcyle birlikte <em><strong>ref readonly returns<\/strong><\/em> \u00f6zelli\u011fi gelmi\u015f bulunmaktad\u0131r. \u015eimdi gelin, bu yeni \u00f6zelli\u011fin ne getirisi oldu\u011fuyla birlikte genel gidi\u015fat\u0131n nereye do\u011fru oldu\u011fu \u00fczerine sizlerle isti\u015farede bulunal\u0131m.<\/p>\n<p>Her yaz\u0131l\u0131mc\u0131 bilir ki; metot i\u00e7erisine d\u0131\u015far\u0131dan g\u00f6nderilen de\u011fi\u015fkenin sadece de\u011ferini de\u011fil, referans\u0131n\u0131 g\u00f6ndermek istiyor ve i\u00e7eride yap\u0131lan i\u015flemler neticesinde de\u011fi\u015fken \u00fczerindeki son de\u011fi\u015fikli\u011fi g\u00f6rmeyi ama\u00e7l\u0131yorsak e\u011fer <a href=\"http:\/\/www.gencayyildiz.com\/blog\/c-metodlarda-ref-ve-params-kullanimi\/\" rel=\"noopener\" target=\"_blank\">ref<\/a> parametresini kullanmaktay\u0131z.<\/p>\n<p>Yok e\u011fer metot i\u00e7erisindeki bir de\u011feri, metodun tetikledi\u011fi ilgili sat\u0131rda bir de\u011fi\u015fken taraf\u0131ndan metot i\u00e7erisinden \u00e7\u0131kar\u0131p elde etmek istiyorsak <a href=\"http:\/\/www.gencayyildiz.com\/blog\/c-7-0-out-variables\/\" rel=\"noopener\" target=\"_blank\">out<\/a> keyword\u00fcn\u00fc kullanmaktay\u0131z.<\/p>\n<p>Bir ba\u015fka durum ise, metot i\u00e7erisinde parametrelerin de\u011ferini sabitlemek istiyorsak e\u011fer <a href=\"http:\/\/www.gencayyildiz.com\/blog\/c-7-2-in-parameters\/\" rel=\"noopener\" target=\"_blank\">In<\/a> parametreisini kullanmam\u0131z yeterli olacakt\u0131r.<\/p>\n<p><em>Bunca kontrol\u00fc sa\u011flayabiliyorken, Ref Readonly Returns \u00f6zelli\u011fi nedir? Neden bu \u00f6zelli\u011fe ihtiya\u00e7 duyulmu\u015ftur?<\/em> \u0130\u015fte cevapland\u0131rmaya \u00e7al\u0131\u015ft\u0131\u011f\u0131m\u0131z soru budur.<\/p>\n<p>Yukar\u0131daki t\u00fcm anlat\u0131lanlar bir metot ile ili\u015fkili de\u011fi\u015fken ya da parametreler i\u00e7in ge\u00e7erlidir. <em>Ref Readonly Returns<\/em> \u00f6zelli\u011fi ise metot yap\u0131lar\u0131ndan \u00e7\u0131karak s\u0131n\u0131f yap\u0131lar\u0131nda i\u015flevsel bir yap\u0131 sunmaktad\u0131r.<\/p>\n<p><em>Ref Readonly Returns<\/em>, bir s\u0131n\u0131f i\u00e7erisindeki de\u011fi\u015fkeni s\u0131n\u0131f\u0131n nesnesi ya da tipi \u00fczerinden referans\u0131yla d\u00f6nd\u00fcrmemizi sa\u011flar ve bir yandan da bu referans\u0131 d\u00f6nd\u00fcr\u00fclen de\u011fi\u015fkenin de\u011ferini sadece okunabilir yapar.<\/p>\n<p>E\u011fer ki a\u015fa\u011f\u0131daki kod blo\u011funu incelerseniz &#8220;ConnectionProvider&#8221; s\u0131n\u0131f\u0131 i\u00e7erisindeki &#8220;Provider&#8221; isimli prototipe eri\u015febilmek i\u00e7in her seferinde bu s\u0131n\u0131ftan bir \u00f6rnek olu\u015fturaca\u011f\u0131mdan dolay\u0131 dolayl\u0131 yoldan her seferinde bir &#8220;Provider&#8221; olu\u015fturmu\u015f oluyoruz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class ConnectionProvider\r\n    {\r\n        public string Provider { get; set; } = &quot;Server=...;Database...;Trus...&quot;;\r\n    }\r\n<\/pre>\n<p>Eee RAM&#8217;in Stack b\u00f6lgesinde birden fazla string tipte &#8220;Provider&#8221; olu\u015fturmaktansa bu \u00f6zelli\u011fi <em>ref readonly<\/em> ile i\u015faretleyerek sadece referans\u0131n\u0131 g\u00f6nderebiliriz ve bu \u015fekilde sade ve sadece bir tane &#8220;Provider&#8221; \u00f6zelli\u011fi \u00fczeriden t\u00fcm \u00e7al\u0131\u015fmam\u0131z\u0131 ger\u00e7ekle\u015ftirebiliriz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class ConnectionProvider\r\n    {\r\n        string _provider = &quot;Server=...;Database...;Trus...&quot;;\r\n        public ref readonly string Provider =&gt; ref _provider;\r\n    }\r\n<\/pre>\n<p>G\u00f6rd\u00fc\u011f\u00fcn\u00fcz \u00fczere &#8220;Provider&#8221; <em>ref readonly<\/em> ile i\u015faretlenmi\u015ftir. Bu \u015fekilde kullan\u0131m\u0131 ise a\u015fa\u011f\u0131daki gibidir;<br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2018\/04\/C-7.2-Ref-Readonly-Returns.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2018\/04\/C-7.2-Ref-Readonly-Returns.png\" alt=\"C# 7.2 - Ref Readonly Returns\" width=\"415\" height=\"332\" class=\"aligncenter size-full wp-image-7803\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2018\/04\/C-7.2-Ref-Readonly-Returns.png 415w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2018\/04\/C-7.2-Ref-Readonly-Returns-300x240.png 300w\" sizes=\"auto, (max-width: 415px) 100vw, 415px\" \/><\/a><br \/>\nDikkat ederseniz e\u011fer &#8220;Provider&#8221; de\u011fi\u015fkenine referans \u00fczerinden eri\u015fildi\u011fi i\u00e7in tek bir &#8220;Provider&#8221; \u00fczerinde \u00e7al\u0131\u015fma ger\u00e7ekle\u015ftirilecektir. Bunun d\u0131\u015f\u0131nda readonly sayesinde herhangi bir de\u011fersel m\u00fcdahale s\u00f6z konusu de\u011fildir.<\/p>\n<p>Tabi burada ilgili s\u0131n\u0131f\u0131n nesnesi \u00fczerinden konuyu ele alm\u0131\u015f bulunmaktay\u0131z. Daha kolay ve pratik \u00e7al\u0131\u015fmak i\u00e7in a\u015fa\u011f\u0131daki gibi static yap\u0131lanma \u00fczerinde de in\u015fa s\u00f6z konusu olabilir.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class ConnectionProvider\r\n    {\r\n        static string _provider = &quot;Server=...;Database...;Trus...&quot;;\r\n        static public ref readonly string Provider =&gt; ref _provider;\r\n    }\r\n<\/pre>\n<p>Nihayetinde .NET mimarisinin referans tipli(reference type) de\u011fi\u015fkenlerde oldu\u011fu gibi de\u011fer tipli(value type) de\u011fi\u015fkenlerde de referans y\u00f6netimini \u00f6nemsedi\u011fini ve bizlerin bu yakla\u015f\u0131m ve \u00fcslupta kodlar\u0131m\u0131z\u0131 in\u015fa etmemizi istedi\u011fini bu son yeniliklerinden anl\u0131yoruz. \u015eahsen; bir de\u011fi\u015fkenin, yaz\u0131l\u0131m\u0131n ya\u015fam d\u00f6ng\u00fcs\u00fc boyunca kullan\u0131m\u0131, referans y\u00f6netimi ve transferi ile daha verimli ve performans a\u00e7\u0131s\u0131ndan kat be kat olumlu sonu\u00e7lar do\u011furacakt\u0131r. Haliyle .NET&#8217;te yaz\u0131l\u0131mlardaki performans y\u00f6netimine bu tarz syntaxlarla katk\u0131da bulunmakta ve mant\u0131\u011f\u0131n\u0131 yaymaya \u00e7al\u0131\u015fmaktad\u0131r. \u0130\u015fte bu sebepten gelece\u011fin programlama \u00e7at\u0131s\u0131 olma \u015ferefini ta\u015f\u0131maktad\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, Fark\u0131nda m\u0131s\u0131n\u0131z bilmem ama her .NET yeniliklerinde metotlar\u0131n d\u00f6n\u00fc\u015f tiplerine ve parametrelerine bir m\u00fcdahalede bulunulmakta ve \u00f6zellikle referanslar arac\u0131l\u0131\u011f\u0131yla yap\u0131lan i\u015flemlere b\u00fcy\u00fck titizlik g\u00f6sterilmektedir. Bu de\u011ferlendirmeye istinaden en son .NET g\u00fcncellemesi ile sunulan&#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":[12,2110],"tags":[2112,2305,2306,163,2304,1528],"class_list":["post-7792","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-c-sharp-c","category-c-7-2","tag-c-7-2","tag-c-7-2-yenilikleri","tag-readonly","tag-ref","tag-ref-readonly-returns","tag-returns"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/7792","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=7792"}],"version-history":[{"count":0,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/7792\/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=7792"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=7792"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=7792"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}