﻿
{"id":4132,"date":"2016-04-23T20:48:12","date_gmt":"2016-04-23T20:48:12","guid":{"rendered":"http:\/\/www.gencayyildiz.com\/blog\/?p=4132"},"modified":"2016-04-23T20:48:13","modified_gmt":"2016-04-23T20:48:13","slug":"cta-oznitelikattribute-olusturma","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/cta-oznitelikattribute-olusturma\/","title":{"rendered":"C#&#8217;ta \u00d6znitelik(Attribute) Olu\u015fturma"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p>Teee ne zamanlar <a href=\"http:\/\/www.gencayyildiz.com\/blog\/mvc-attribute-olusturma\/\" target=\"_blank\">MVC Attribute Olu\u015fturma<\/a> ba\u015fl\u0131kl\u0131 yaz\u0131mda Asp.NET MVC mimarisine \u00f6zel Attribute olu\u015fturma konusunu ele alm\u0131\u015ft\u0131m. \u015eimdi ise C# ile \u00f6zel \u00f6znitelik(Attribute) olu\u015fturmay\u0131 inceleyece\u011fiz.<\/p>\n<p>Attribute yap\u0131lar\u0131 asl\u0131nda arka planda bir class tan\u0131mlamalar\u0131d\u0131r. C#&#8217;ta bir Attribute tan\u0131mlarken ilgili class&#8217;a Attribute oldu\u011funu bildirmek i\u00e7in &#8220;Attribute&#8221; s\u0131n\u0131f\u0131ndan t\u00fcretmemiz ve ard\u0131ndan &#8220;AttributeUsage&#8221; Attribute&#8217;u ile hangi elemanlar \u00fczerinde \u00e7al\u0131\u015ft\u0131r\u0131labilece\u011fini belirtmemiz yeterlidir.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    &#x5B;System.AttributeUsage(AttributeTargets.Method)]\r\n    class KontrolAttribute : Attribute\r\n    {\r\n        public KontrolAttribute()\r\n        {\r\n            Console.WriteLine(&quot;Kontrol Attribute tetiklenmi\u015ftir.&quot; );\r\n        }\r\n    }\r\n<\/pre>\n<p>Yukar\u0131daki kod blo\u011funu incelersek e\u011fer bir \u00f6nceki paragrafta bahsetti\u011fimiz gibi &#8220;KontrolAttribute&#8221; s\u0131n\u0131f\u0131n\u0131 \u00f6znitelik olarak kullanabilmek i\u00e7in &#8220;Attribute&#8221; s\u0131n\u0131f\u0131ndan t\u00fcrettik ve &#8220;AttributeUsage&#8221; \u00f6zniteli\u011fi sayesinde bu \u00f6zniteli\u011fin sadece metodlarda \u00e7al\u0131\u015faca\u011f\u0131n\u0131 belirttik.<\/p>\n<p><a href=\"http:\/\/www.gencayyildiz.com\/blog\/cta-oznitelikattribute-olusturma\/cta-oznitelikattribute-olusturma\/\" rel=\"attachment wp-att-4136\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-4136\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/04\/Cta-\u00d6znitelikAttribute-Olu\u015fturma.png\" alt=\"C#'ta \u00d6znitelik(Attribute) Olu\u015fturma\" width=\"349\" height=\"180\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/04\/Cta-\u00d6znitelikAttribute-Olu\u015fturma.png 349w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/04\/Cta-\u00d6znitelikAttribute-Olu\u015fturma-300x155.png 300w\" sizes=\"auto, (max-width: 349px) 100vw, 349px\" \/><\/a><\/p>\n<p>Yukar\u0131daki g\u00f6r\u00fcnt\u00fclere bakarsan\u0131z e\u011fer AttributeTargets Enumaration&#8217;\u0131n\u0131n hangi de\u011ferleri alabildi\u011fini g\u00f6rebilirsiniz. Anlayaca\u011f\u0131n\u0131z field&#8217;dan tutun deletate&#8217;lere kadar t\u00fcm yap\u0131lara \u00f6zel \u00f6znitelik tan\u0131mlayabilmekteyiz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class OrnekClass\r\n    {\r\n        &#x5B;Kontrol()]\r\n        public void OrnekMetod()\r\n        {\r\n\r\n        }\r\n    }\r\n<\/pre>\n<p>Bildi\u011finiz gibi olu\u015fturdu\u011fumuz \u00f6zniteli\u011fi yukar\u0131daki gibi kullanabilmekteyiz. Tabi \u00f6znitelik s\u0131n\u0131f\u0131m\u0131z Attribute s\u0131n\u0131f\u0131ndan t\u00fcretildi\u011fi i\u00e7in &#8220;classname[Attribute]&#8221; \u015feklinde tan\u0131mlansada bir \u00f6znitelik oldu\u011fu i\u00e7in \u00e7a\u011fr\u0131ld\u0131\u011f\u0131 yerde classname&#8217;i yazmam\u0131z yeterlidir.<\/p>\n<p>\u015eimdi property ve metodlara \u00f6zel iki \u00e7al\u0131\u015fma g\u00f6sterece\u011fim. Siz de\u011ferli okuyucular\u0131m, yapt\u0131\u011f\u0131m bu \u00e7al\u0131\u015fmalar\u0131 di\u011fer elemanlara genelleyebilirsiniz.<\/p>\n<h3>Property&#8217;e \u00d6zel Attribute<\/h3>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    &#x5B;AttributeUsage(AttributeTargets.Property)]\r\n    class KontrolAttribute : Attribute\r\n    {\r\n        public int Para { get; set; }\r\n    }\r\n<\/pre>\n<p>\u00d6zniteli\u011fi kullanaca\u011f\u0131m\u0131z propertynin bulundu\u011fu s\u0131n\u0131f\u0131 in\u015fa edelim.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class AlisVeris\r\n    {\r\n        public AlisVeris(int Fiyat)\r\n        {\r\n            this.Fiyat = Fiyat;\r\n            foreach (var property in typeof(AlisVeris).GetProperties())\r\n            {\r\n                foreach (var attr in property.GetCustomAttributes(false))\r\n                {\r\n                    if (property.Name == &quot;Fiyat&quot;)\r\n                    {\r\n                        KontrolAttribute kontrolAttribute = (KontrolAttribute)attr;\r\n                        if ((int)property.GetValue(this) &gt; kontrolAttribute.Para)\r\n                            Console.WriteLine(&quot;Al\u0131\u015fveri\u015f yap\u0131ld\u0131.&quot;);\r\n                        else\r\n                            Console.WriteLine(&quot;Para eksik&quot;);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n\r\n        &#x5B;Kontrol(Para = 100)]\r\n        public int Fiyat { get; set; }\r\n    }\r\n<\/pre>\n<p>Yukar\u0131daki kod blo\u011funu incelerseniz e\u011fer, propertyi kullanaca\u011f\u0131m\u0131z s\u0131n\u0131f\u0131n constructer\u0131nda bu s\u0131n\u0131fa ba\u011fl\u0131 propertylere tan\u0131mlanm\u0131\u015f t\u00fcm attributelar\u0131 tetiklemekteyiz. \u00d6rnekte yapt\u0131\u011f\u0131m\u0131z algoritmada Fiyat propertysinin Kontrol Attribute&#8217;una verilen de\u011fer ile k\u0131yaslamas\u0131 yap\u0131lmaktad\u0131r.<\/p>\n<p>AlisVeris s\u0131n\u0131f\u0131 a\u015fa\u011f\u0131daki \u015fekilde \u00f6rneklendirildi\u011finde ise,<\/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            AlisVeris alisVeris = new AlisVeris(150);\r\n            AlisVeris alisVeris2 = new AlisVeris(10);\r\n            Console.Read();\r\n        }\r\n    }\r\n<\/pre>\n<p><a href=\"http:\/\/www.gencayyildiz.com\/blog\/cta-oznitelikattribute-olusturma\/cta-oznitelikattribute-olusturma-2\/\" rel=\"attachment wp-att-4146\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/04\/Cta-\u00d6znitelikAttribute-Olu\u015fturma-1.png\" alt=\"C#&#039;ta \u00d6znitelik(Attribute) Olu\u015fturma\" width=\"170\" height=\"90\" class=\"aligncenter size-full wp-image-4146\" \/><\/a><br \/>\nsonucunu vermektedir.<\/p>\n<p>\u015eimdi benzer bir mant\u0131kla metodlara \u00f6zel Attributelar\u0131 inceleyelim.<\/p>\n<h3>Metoda \u00d6zel Attribute<\/h3>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    &#x5B;AttributeUsage(AttributeTargets.Method)]\r\n    class KontrolAttribute : Attribute\r\n    {\r\n        public void Durum(bool Durum)\r\n        {\r\n            if (Durum)\r\n                Console.WriteLine(&quot;Kontrol tamamland\u0131...&quot;);\r\n            else\r\n                Console.WriteLine(&quot;Kontrol ediliyor...&quot;);\r\n        }\r\n    }\r\n<\/pre>\n<p>\u0130lgili \u00f6zniteli\u011fi kullanacak metodu bar\u0131nd\u0131ran s\u0131n\u0131f\u0131m\u0131z\u0131 in\u015fa edelim.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class AlisVeris\r\n    {\r\n        public AlisVeris(bool Durum)\r\n        {\r\n            foreach (var method in typeof(AlisVeris).GetMethods())\r\n            {\r\n                foreach (var attr in method.GetCustomAttributes(false))\r\n                {\r\n                    if (method.Name == &quot;AlisVerisYap&quot;)\r\n                    {\r\n                        KontrolAttribute kontrolAttribute = (KontrolAttribute)attr;\r\n                        kontrolAttribute.Durum(Durum);\r\n                        AlisVerisYap(Durum);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        &#x5B;Kontrol]\r\n        public void AlisVerisYap(bool Durum)\r\n        {\r\n            if (Durum)\r\n                Console.WriteLine(&quot;Al\u0131\u015f veri\u015f yap\u0131ld\u0131.&quot;);\r\n            else\r\n                Console.WriteLine(&quot;Al\u0131\u015f veri\u015f yap\u0131lamad\u0131&quot;);\r\n        }\r\n    }\r\n<\/pre>\n<p>Yukar\u0131daki kod blo\u011funu incelersek e\u011fer ilgili s\u0131n\u0131f\u0131n tipinde bulunan metodlara ba\u011fl\u0131 attributelar tetiklenmekte ve basit bir algoritmik i\u015flem ger\u00e7ekle\u015ftirilmektedir.<\/p>\n<p>Bu \u015fekilde AlisVeris s\u0131n\u0131f\u0131ndan a\u015fa\u011f\u0131daki gibi nesne \u00fcretti\u011fimizde ise,<\/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            AlisVeris alisVeris = new AlisVeris(true);\r\n            AlisVeris alisVeris2 = new AlisVeris(false);\r\n            Console.Read();\r\n        }\r\n    }\r\n<\/pre>\n<p><a href=\"http:\/\/www.gencayyildiz.com\/blog\/cta-oznitelikattribute-olusturma\/cta-oznitelikattribute-olusturma-3\/\" rel=\"attachment wp-att-4149\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/04\/Cta-\u00d6znitelikAttribute-Olu\u015fturma-2.png\" alt=\"C#&#039;ta \u00d6znitelik(Attribute) Olu\u015fturma\" width=\"200\" height=\"109\" class=\"aligncenter size-full wp-image-4149\" \/><\/a><br \/>\nsonucunu elde etmekteyiz.<\/p>\n<h3>AllowMultiple \u00d6zelli\u011fi<\/h3>\n<p>AllowMultiple \u00f6zelli\u011fi ile olu\u015fturulacak Attribute&#8217;un \u00e7oklu kullan\u0131m iznini ayarlayabilmekteyiz.<br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/cta-oznitelikattribute-olusturma\/cta-oznitelikattribute-olusturma-4\/\" rel=\"attachment wp-att-4151\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/04\/Cta-\u00d6znitelikAttribute-Olu\u015fturma-3.png\" alt=\"C#&#039;ta \u00d6znitelik(Attribute) Olu\u015fturma\" width=\"322\" height=\"254\" class=\"aligncenter size-full wp-image-4151\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/04\/Cta-\u00d6znitelikAttribute-Olu\u015fturma-3.png 322w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/04\/Cta-\u00d6znitelikAttribute-Olu\u015fturma-3-300x237.png 300w\" sizes=\"auto, (max-width: 322px) 100vw, 322px\" \/><\/a><br \/>\nG\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi AllowMultiple \u00f6zelli\u011fi varsay\u0131lan olarak false de\u011ferine sahiptir.<br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/cta-oznitelikattribute-olusturma\/cta-oznitelikattribute-olusturma-5\/\" rel=\"attachment wp-att-4152\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/04\/Cta-\u00d6znitelikAttribute-Olu\u015fturma-4.png\" alt=\"C#&#039;ta \u00d6znitelik(Attribute) Olu\u015fturma\" width=\"483\" height=\"255\" class=\"aligncenter size-full wp-image-4152\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/04\/Cta-\u00d6znitelikAttribute-Olu\u015fturma-4.png 483w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/04\/Cta-\u00d6znitelikAttribute-Olu\u015fturma-4-300x158.png 300w\" sizes=\"auto, (max-width: 483px) 100vw, 483px\" \/><\/a><br \/>\ntrue de\u011ferini verdi\u011fimizde ayn\u0131 yap\u0131 \u00fczerinde birden fazla kullan\u0131m sa\u011flayabilmekteyiz.<\/p>\n<h3>Inherited \u00d6zelli\u011fi<\/h3>\n<p>Bu \u00f6zellik sayesinde olu\u015fturdu\u011fumuz Attribute ile i\u015faretlenen s\u0131n\u0131flardan kal\u0131t\u0131m alan ba\u015fka s\u0131n\u0131flar\u0131n \u00f6rneklendirmesinde Attribute&#8217;un i\u015flevselli\u011fini ayarlamaktay\u0131z. Varsay\u0131lan olarak true de\u011ferine sahiptir.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    &#x5B;AttributeUsage(AttributeTargets.All, Inherited = false)]\r\n    class KontrolAttribute : Attribute\r\n    {\r\n        public void Metod()\r\n        {\r\n            Console.WriteLine(&quot;Attribute tetiklendi.&quot;);\r\n        }\r\n    }\r\n<\/pre>\n<p>E\u011fer ki, Inherited \u00f6zelli\u011fine yukar\u0131daki gibi false de\u011ferini verip a\u015fa\u011f\u0131daki gibi Kontrol \u00f6zniteli\u011fiyle i\u015faretlenmi\u015f s\u0131n\u0131ftan kal\u0131t\u0131m alan s\u0131n\u0131f\u0131n nesnesini al\u0131rsak art\u0131k bu \u00f6znitelik Derived Class&#8217;ta ger\u00e7eli olmayacakt\u0131r.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class OrnekClass2 : OrnekClass\r\n    {\r\n\r\n    }\r\n\r\n    &#x5B;Kontrol]\r\n    class OrnekClass\r\n    {\r\n\r\n    }\r\n<\/pre>\n<p>Evet, \u015fimdi OrnekClass2 nesnesi yarat\u0131r ve ilgili tipe ba\u011fl\u0131 attribute var m\u0131? yok mu? kontrol edersek e\u011fer,<br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/cta-oznitelikattribute-olusturma\/cta-oznitelikattribute-olusturma-6\/\" rel=\"attachment wp-att-4157\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/04\/Cta-\u00d6znitelikAttribute-Olu\u015fturma-5.png\" alt=\"C#&#039;ta \u00d6znitelik(Attribute) Olu\u015fturma\" width=\"607\" height=\"182\" class=\"aligncenter size-full wp-image-4157\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/04\/Cta-\u00d6znitelikAttribute-Olu\u015fturma-5.png 607w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/04\/Cta-\u00d6znitelikAttribute-Olu\u015fturma-5-300x90.png 300w\" sizes=\"auto, (max-width: 607px) 100vw, 607px\" \/><\/a><br \/>\na\u015fa\u011f\u0131daki hatay\u0131 alaca\u011f\u0131z.<\/p>\n<p>Eee buda gayet do\u011fal. Nihayetinde Inherited \u00f6zelli\u011fine false de\u011fer vererek kal\u0131tsal durumlarda \u00f6zniteliklerin i\u015flevselli\u011fini pasifize etmi\u015f olduk.<\/p>\n<p>Bir yaz\u0131m\u0131z\u0131n daha sonuna gelmi\u015f bulunmaktay\u0131z.<\/p>\n<p>Sonraki yaz\u0131lar\u0131mda g\u00f6r\u00fc\u015fmek \u00fczere&#8230;<\/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>Merhaba, Teee ne zamanlar MVC Attribute Olu\u015fturma ba\u015fl\u0131kl\u0131 yaz\u0131mda Asp.NET MVC mimarisine \u00f6zel Attribute olu\u015fturma konusunu ele alm\u0131\u015ft\u0131m. \u015eimdi ise C# ile \u00f6zel \u00f6znitelik(Attribute) olu\u015fturmay\u0131 inceleyece\u011fiz. Attribute yap\u0131lar\u0131 asl\u0131nda arka planda bir class tan\u0131mlamalar\u0131d\u0131r.&#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],"tags":[1133,1128,313,27,1130,1129,1134,1132,1127,1131],"class_list":["post-4132","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-c-sharp-c","tag-allowmultiple","tag-attr","tag-attribute","tag-c","tag-c-attribute-kullanma","tag-c-attribute-olusturma","tag-inherited","tag-metoda-ozel-attribute","tag-oznitelik","tag-propertye-ozel-attribute"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/4132","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=4132"}],"version-history":[{"count":0,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/4132\/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=4132"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=4132"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=4132"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}