﻿
{"id":5902,"date":"2017-04-05T17:02:30","date_gmt":"2017-04-05T17:02:30","guid":{"rendered":"http:\/\/www.gencayyildiz.com\/blog\/?p=5902"},"modified":"2017-04-05T17:02:56","modified_gmt":"2017-04-05T17:02:56","slug":"c-partial-method-yapilari","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/c-partial-method-yapilari\/","title":{"rendered":"C# &#8211; Partial Method Yap\u0131lar\u0131"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p>Biliyorsunuz ki C#&#8217;ta, &#8220;<em>partial<\/em>&#8221; keyword\u00fc arac\u0131l\u0131\u011f\u0131yla class yap\u0131lar\u0131nda &#8220;partial class&#8221; \u00fcretebilmekteyiz. Yani bir s\u0131n\u0131f\u0131n farkl\u0131 lokasyondaki par\u00e7as\u0131n\u0131 olu\u015fturabilmekteyiz. &#8220;partial&#8221; keyword\u00fcn\u00fcn bu i\u015flevinin d\u0131\u015f\u0131nda benim daha yeni \u00f6\u011frenmi\u015f oldu\u011fum ve \u00e7o\u011fu kaynakta da timsali zor bulunan bir durumdan bahsedece\u011fim sizlere. &#8220;Partial Method&#8221; yap\u0131lar\u0131ndan&#8230;<\/p>\n<p>&#8220;partial&#8221; keyword\u00fc kullan\u0131labildi\u011fi yap\u0131larda par\u00e7alar\u0131 birle\u015ftirme i\u015flevi g\u00fcden ve farkl\u0131 dosyalar\u0131n bir b\u00fct\u00fcn olarak \u00e7al\u0131\u015fabilmesini sa\u011flayan bir modifier(nitelendirici)dir. Haliyle bu keyword\u00fc classlar \u00fczerinde kullan\u0131rsak class par\u00e7alar\u0131n\u0131 birle\u015ftirecektir. Yok e\u011fer metotlar \u00fczerinde kullan\u0131rsakta metot par\u00e7as\u0131n\u0131 b\u00fct\u00fcnsel olarak g\u00f6recektir.<\/p>\n<p>\u015eimdi gelin &#8220;Partial Method&#8221;lar\u0131 inceleyelim. Tabi her yap\u0131da oldu\u011fu gibi partial ve method kavramlar\u0131 bir araya geldi\u011fi vakitte belli ba\u015fl\u0131 kurallar meydana gelmektedir. Do\u011fal olarak gelin bu kurallar \u00e7er\u00e7evesinde konuyu ele alal\u0131m.<\/p>\n<ul>\n<li>\nPartial metotlar partial classlar i\u00e7ine tan\u0131mlanabilirler.\n<\/li>\n<li>Ayn\u0131 classlarda oldu\u011fu gibi partial metot yap\u0131lar\u0131n\u0131n ikisininde &#8220;partial&#8221; keyword\u00fcyle i\u015faretlenmesi gerekmektedir.\n<\/li>\n<li>\nPartial metotlardan biri tan\u0131m, bir di\u011feride g\u00f6vde olmak zorundad\u0131r.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    partial class OrnekSinif\r\n    {\r\n        \/\/Tan\u0131m\r\n        partial void X();\r\n        \/\/G\u00f6vde\r\n        partial void X()\r\n        {\r\n\r\n        }\r\n    }\r\n<\/pre>\n<\/li>\n<li>Partial metotlar\u0131n geri d\u00f6n\u00fc\u015f tipi her zaman void olmal\u0131d\u0131r.<\/li>\n<li>Partial metotlar out parametreler alamazlar lakin ref parametreleri alabilirler.\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    partial class OrnekSinif\r\n    {\r\n        partial void X(ref int x);\r\n        partial void X(ref int x)\r\n        {\r\n\r\n        }\r\n    }\r\n<\/pre>\n<\/li>\n<li>Partial metotlar <em>extern<\/em> ve <em>virtual<\/em> olamazlar.<\/li>\n<li>Partial metotlar <em>static<\/em> yahut <em>generic<\/em> olabilirler.<\/li>\n<li>Partial metotlar eri\u015fim belirleyicileri almazlar. Yani bir nevi her daim private eri\u015fim belirleyicisine sahiptirler.<\/li>\n<li>Partial metotlar delegate ile temsil edilemezler. Bunun sebebi birazdan da g\u00f6rece\u011fimiz \u00fczere partial metotlar\u0131n \u00e7al\u0131\u015fma zaman\u0131nda(Run Time) var olaca\u011f\u0131 kesin de\u011fildir.<\/li>\n<\/ul>\n<p>Yukar\u0131daki maddelerden birinde bahsetmi\u015f oldu\u011fum tan\u0131m ve g\u00f6vde ikilisinde asl\u0131nda tan\u0131mdan kast\u0131m declaration(beyanname), g\u00f6vdeden ise implementation(uygulama)d\u0131r.<\/p>\n<p>Partial metotlarda as\u0131l maksat, bir metotun declaration&#8217;\u0131n\u0131n bir dosyada, implementation&#8217;\u0131n\u0131n ba\u015fka bir dosyada durmas\u0131n\u0131 sa\u011flamakt\u0131r. Bu a\u00e7\u0131dan bak\u0131nca partial metodlar\u0131, partial classlarda kullanmak daha elveri\u015flidir.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    partial class OrnekSinif\r\n    {\r\n        \/\/Declaration\r\n        partial void X(ref int x);\r\n    }\r\n\r\n    partial class OrnekSinif\r\n    {\r\n        \/\/Implementation\r\n        partial void X(ref int x)\r\n        {\r\n\r\n        }\r\n    }\r\n<\/pre>\n<p>E\u011fer ki declaration bir partial metodun implementation&#8217;\u0131n\u0131 olu\u015fturmazsan\u0131z hata almazs\u0131n\u0131z. Bu demek oluyor ki, uygulanmam\u0131\u015f bir partial metot derleme s\u0131ras\u0131nda yok say\u0131lmaktad\u0131r. \u0130\u015fte bu y\u00fczden yukar\u0131da son madde olarak belirtti\u011fim gibi delegate yap\u0131lar\u0131nca ilgili metot temsil edilmemektedir.<\/p>\n<p>Bu duruma \u00f6rnek olarak a\u015fa\u011f\u0131daki kod yap\u0131s\u0131n\u0131 incelerseniz e\u011fer;<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    partial class OrnekSinif\r\n    {\r\n        partial void X();\r\n    }\r\n\r\n    partial class OrnekSinif\r\n    {\r\n        public void Y()\r\n        {\r\n            X();\r\n        }\r\n        partial void X()\r\n        {\r\n            MessageBox.Show(&quot;Test&quot;);\r\n        }\r\n    }\r\n<\/pre>\n<p>X metodu partial oldu\u011fu i\u00e7in do\u011fal olarak private eri\u015fim belirleyicisine sahiptir. Haliyle X metodunu nesne \u00fczerinden kullanabilmek i\u00e7in public olan Y metodu olu\u015fturulmu\u015ftur. Burada Y i\u00e7erisinde X metodu \u00e7a\u011f\u0131r\u0131ld\u0131\u011f\u0131 i\u00e7in Compiler taraf\u0131ndan X metodu private olarak g\u00f6r\u00fclecek, say\u0131lacakt\u0131r. Yok e\u011fer Y metodu i\u00e7erisinden X metodunun \u00e7a\u011f\u0131rma ifadesini silersek e\u011fer Compiler derleme a\u015famas\u0131nda X diye bir metod g\u00f6rmeyecektir.<\/p>\n<p>Evet&#8230;<\/p>\n<p>Bu pek fazla bilinmeyen amma nedense kullan\u0131l\u0131\u015f\u0131 benim \u00e7ok ho\u015fuma giden konuyu ayd\u0131nlatm\u0131\u015f oldu\u011fuma inan\u0131yor ve \u015fimdilik ho\u015f\u00e7akal\u0131n diyorum&#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, Biliyorsunuz ki C#&#8217;ta, &#8220;partial&#8221; keyword\u00fc arac\u0131l\u0131\u011f\u0131yla class yap\u0131lar\u0131nda &#8220;partial class&#8221; \u00fcretebilmekteyiz. Yani bir s\u0131n\u0131f\u0131n farkl\u0131 lokasyondaki par\u00e7as\u0131n\u0131 olu\u015fturabilmekteyiz. &#8220;partial&#8221; keyword\u00fcn\u00fcn bu i\u015flevinin d\u0131\u015f\u0131nda benim daha yeni \u00f6\u011frenmi\u015f oldu\u011fum ve \u00e7o\u011fu kaynakta da timsali&#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],"tags":[1669,1668,1670,1667,1416,1664,1665,1666],"class_list":["post-5902","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-c-sharp-c","tag-c-partial-method","tag-c-partial-metot","tag-ildasm","tag-parca","tag-partial","tag-partial-class","tag-partial-method","tag-partial-metot"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/5902","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=5902"}],"version-history":[{"count":0,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/5902\/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=5902"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=5902"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=5902"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}