﻿
{"id":2586,"date":"2014-03-28T15:08:54","date_gmt":"2014-03-28T15:08:54","guid":{"rendered":"http:\/\/www.gencayyildiz.com\/blog\/?p=2586"},"modified":"2014-03-28T15:08:54","modified_gmt":"2014-03-28T15:08:54","slug":"c-bir-erisim-belirleyicisi-paradoksu","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/c-bir-erisim-belirleyicisi-paradoksu\/","title":{"rendered":"C# &#8211; Bir Eri\u015fim Belirleyicisi Paradoksu"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Bir bot \u00fczerinde \u00e7al\u0131\u015f\u0131rken teknik bir hatayla kar\u015f\u0131la\u015ft\u0131m.Yakla\u015f\u0131k 30 &#8211; 45 dk boyunca bu hata \u00fczerine yo\u011funla\u015ft\u0131m.Onu denedim, bunu denedim.. Yok! B\u00fct\u00fcn OOP bilgilerimi g\u00f6zden ge\u00e7irdim.Kal\u0131t\u0131msal durumlar\u0131n hepsini inceledim.. Derken bu hatan\u0131n en son teknik \u00e7\u00f6z\u00fcm\u00fcn\u00fc buldum.Lakin benim yaz\u0131l\u0131m alan\u0131ndaki temel felsefe prensiplerimden birisi &#8220;<strong>Yaz\u0131l\u0131mda, Teorik Bilgi Pratik Bilgiyi Destekler<\/strong>&#8221; oldu\u011fu i\u00e7in bizler i\u00e7in \u00f6nem arz eden bu hatan\u0131n <em>teorik sebebiyle<\/em> beraber teknik \u00e7\u00f6z\u00fcm\u00fcn\u00fc sizlere izah edece\u011fim.<br \/>\n<!--more--><br \/>\n\u00d6ncelikle bu hata hangi durumda kar\u015f\u0131m\u0131za \u00e7\u0131kmaktad\u0131r bir bakal\u0131m.<br \/>\n\u00d6rne\u011fin &#8220;ModelA&#8221; ve &#8220;ModelB&#8221; isimli iki s\u0131n\u0131f\u0131m\u0131z olsun.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n--- ModelA.cs ---\r\n    class ModelA\r\n    {\r\n        public int Field { get; set; }\r\n    }\r\n<\/pre>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n--- ModelB.cs ---\r\n    public class ModelB\r\n    {\r\n        public ModelB(ModelA ModelA)\r\n        {\r\n\r\n        }\r\n    }\r\n<\/pre>\n<p>G\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi &#8220;ModelA&#8221; s\u0131n\u0131f\u0131m\u0131z i\u00e7erisinde \u00f6rnek bir &#8220;Field&#8221; isimli propert bulunmaktad\u0131r.Tabi bu propertynin konumuzda hi\u00e7 bir espirisi yok.Sadece bir \u00f6rnek.&#8221;ModelB&#8221; s\u0131n\u0131f\u0131nda ise bir Constructor mevcuttur ve &#8220;ModelA&#8221; tipinden bir parametre almaktad\u0131r.\u0130\u015fte burada bu Constructor&#8217;a yaz\u0131n\u0131n ilerilerinde dikkatinizi \u00e7ekmek istiyorum.<\/p>\n<p>Oppss&#8230;Oda ne..Projemizde ki &#8220;ModelA&#8221; ve &#8220;ModelB&#8221; s\u0131n\u0131flar\u0131 bu \u015fekilde olunca a\u015fa\u011f\u0131daki gibi bir hata vermektedir.<\/p>\n<p><a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2014\/03\/Inconsistent-Accessibility.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-2588\" alt=\"Inconsistent Accessibility\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2014\/03\/Inconsistent-Accessibility-300x70.png\" width=\"300\" height=\"70\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2014\/03\/Inconsistent-Accessibility-300x70.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2014\/03\/Inconsistent-Accessibility.png 608w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>Hatan\u0131n metinsel \u015feklide a\u015fa\u011f\u0131daki gibidir.<br \/>\n&#8220;<em><strong><span style=\"color: #ff0000;\">Inconsistent accessibility: parameter type &#8216;WindowsFormsApplication7.ModelA&#8217; is less accessible than method &#8216;WindowsFormsApplication7.ModelB.ModelB(WindowsFormsApplication7.ModelA)&#8217;<\/span><\/strong><\/em>&#8221;<\/p>\n<p>\u0130\u015fte hatam\u0131z budur.<\/p>\n<p>\u015eimdi gelin bu hatan\u0131n \u00e7\u00f6z\u00fcm\u00fcn\u00fc neymi\u015f g\u00f6relim.Tabi \u00f6ncelikle burada yapmam\u0131z gereken ilk i\u015f hatay\u0131 ald\u0131\u011f\u0131m\u0131z ilgili iki s\u0131n\u0131f\u0131 incelemek olmal\u0131d\u0131r.<\/p>\n<p>\u015eimdi bu yaz\u0131n\u0131n ba\u015flar\u0131na geri d\u00f6n\u00fcn ve orada yaz\u0131l\u0131 iki s\u0131n\u0131f\u0131 daha dikkatli inceleyin.<br \/>\n&#8220;ModelA&#8221; s\u0131n\u0131f\u0131n\u0131n eri\u015fim belirleyicisi &#8220;private&#8221; iken &#8220;ModelB&#8221; s\u0131n\u0131f\u0131n\u0131n eri\u015fim belirleyicisi &#8220;public&#8221; oldu\u011funa dikkat edin.&#8221;ModelB&#8221; s\u0131n\u0131f\u0131 &#8220;public&#8221; oldu\u011fu i\u00e7in farkl\u0131 projelerde bu projeyi .dll olarak y\u00fcklersek do\u011fal olarak bu s\u0131n\u0131fa eri\u015fim sa\u011flanabilmektedir.Lakin &#8220;ModelA&#8221; s\u0131n\u0131f\u0131 &#8220;private&#8221; oldu\u011fu i\u00e7in sadece bu projeye \u00f6zel kullan\u0131labilmekte, ba\u015fka projelerde kullan\u0131lamamaktad\u0131r.B\u00f6yle bir durumda &#8220;ModelB&#8221; nesnesinin Constructor&#8217;\u0131nda &#8220;ModelA&#8221; nesnesi istenmektedir.Derleyicinin bu hatay\u0131 vermesinin sebebi, ba\u015fka bir projede bu projenin .dll dosyas\u0131n\u0131n kullan\u0131ld\u0131\u011f\u0131n\u0131 varsayarsak &#8220;ModelB&#8221; nesnesi olu\u015fturulurken Constructor&#8217;\u0131 sayesinde d\u0131\u015far\u0131 eri\u015fimi olmayan bir s\u0131n\u0131f\u0131 istenecek ve b\u00f6yle paradoksa sebep vermi\u015f olaca\u011f\u0131z.Yani &#8220;ModelB&#8221; nesnesi olu\u015fturabilmek i\u00e7in &#8220;ModelA&#8221; nesnesine ihtiya\u00e7 vard\u0131r ama &#8220;ModelA&#8221; ya eri\u015fim olmad\u0131\u011f\u0131ndan dolay\u0131 \u00e7\u0131kmaz bir sorunla kar\u015f\u0131 kar\u015f\u0131ya kalaca\u011f\u0131z.O y\u00fczden b\u00f6yle bir kullan\u0131m tarz\u0131 .NET mimarisi taraf\u0131ndan yasaklanm\u0131\u015ft\u0131r.<\/p>\n<p>Olay\u0131 teorik olarak \u00e7\u00f6zd\u00fc\u011f\u00fcm\u00fcze inanmaktay\u0131m. \ud83d\ude42 \u015eimdi gelelim teknik olarak bu sorundan nas\u0131l kurtulaca\u011f\u0131m\u0131za.<\/p>\n<p>Asl\u0131nda teorik olarak olay anla\u015f\u0131ld\u0131\u011f\u0131 zaman, kulland\u0131\u011f\u0131n\u0131z programlama dilinin yap\u0131lar\u0131na hakimseniz o i\u015fi teknik olarak \u00e7\u00f6zmek art\u0131k \u00e7ocuk oyunca\u011f\u0131d\u0131r.<\/p>\n<p>Madem ki, &#8220;ModelA&#8221; s\u0131n\u0131f\u0131 &#8220;private&#8221; oldu\u011fu i\u00e7in bu hatay\u0131 al\u0131yoruz tek yapaca\u011f\u0131m\u0131z i\u015flem bu s\u0131n\u0131f\u0131 &#8220;public&#8221; yapmak olacakt\u0131r.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public class ModelA\r\n    {\r\n        public int Field { get; set; }\r\n    }\r\n<\/pre>\n<p>Art\u0131k bu hatadan teknik olarakta rahat bir \u015fekilde kurtulmu\u015f bulunmaktas\u0131n\u0131z.<\/p>\n<p>Son kez unutmay\u0131n ki; metod, property ya da (\u00f6zellikle)s\u0131n\u0131flar\u0131n\u0131zda eri\u015fim belirleyicilerinizi program\u0131n gelece\u011fini d\u00fc\u015f\u00fcnerek vermeniz kompleks hatalardan ka\u00e7\u0131nman\u0131za sebebiyet verecektir.<\/p>\n<p>Yaz\u0131m\u0131 burada sonland\u0131r\u0131rken bir sonraki sayfada verilen bir s\u0131n\u0131f \u00f6rne\u011fide bu tarz bir hataya \u00f6rnek olarak nitelendirilebilir ve ayn\u0131 mant\u0131kla yorumlan\u0131p, ayn\u0131 teknikle \u00e7\u00f6z\u00fcm getirilebilir&#8230;<\/p>\n<p>Sonraki yaz\u0131lar\u0131mda g\u00f6r\u00fc\u015fmek \u00fczere&#8230;<br \/>\n\u0130yi \u00e7al\u0131\u015fmalar&#8230;<br \/>\n<!--nextpage--><br \/>\nBuradaki \u00f6rnek bu konuyu daha iyi kavrayabilmeniz i\u00e7in verilmi\u015ftir.\u00d6nceki sayfada belirtildi\u011fi gibi \u00e7\u00f6z\u00fcm ve bilgilerde hi\u00e7 bir de\u011fi\u015fiklik bulunmamaktad\u0131r.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n--- ModelA.cs ---\r\n    class ModelA\r\n    {\r\n        public int Field { get; set; }\r\n    }\r\n<\/pre>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n--- ModelB.cs ---\r\n    public class ModelB\r\n    {\r\n        public ModelA ModelAField { get; set; }\r\n    }\r\n<\/pre>\n<p>Benzer olaylar \u00e7o\u011falt\u0131labilir&#8230;Yeter ki siz i\u015fin teorik ve teknik bilgisine hakim olun.<\/p>\n<p>\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>Bir bot \u00fczerinde \u00e7al\u0131\u015f\u0131rken teknik bir hatayla kar\u015f\u0131la\u015ft\u0131m.Yakla\u015f\u0131k 30 &#8211; 45 dk boyunca bu hata \u00fczerine yo\u011funla\u015ft\u0131m.Onu denedim, bunu denedim.. Yok! B\u00fct\u00fcn OOP bilgilerimi g\u00f6zden ge\u00e7irdim.Kal\u0131t\u0131msal durumlar\u0131n hepsini inceledim.. Derken bu hatan\u0131n en son&#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,338],"tags":[27,358,581,583,582],"class_list":["post-2586","post","type-post","status-publish","format-standard","hentry","category-c-sharp-c","category-c-5-0","tag-c","tag-constructer","tag-erisim-belirleyicisi","tag-private","tag-public"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/2586","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=2586"}],"version-history":[{"count":0,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/2586\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=2586"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=2586"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=2586"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}