{"id":696,"date":"2010-09-04T21:28:30","date_gmt":"2010-09-04T19:28:30","guid":{"rendered":"https:\/\/fatihboy.com\/post\/oznitelikler-ve-reflectionla-csharp-dilini-ihtiyaclariniz-dogrultusunda-genisletin"},"modified":"2010-09-04T21:28:30","modified_gmt":"2010-09-04T19:28:30","slug":"oznitelikler-ve-reflectionla-csharp-dilini-ihtiyaclariniz-dogrultusunda-genisletin","status":"publish","type":"post","link":"https:\/\/fatihboy.com\/en\/oznitelikler-ve-reflectionla-csharp-dilini-ihtiyaclariniz-dogrultusunda-genisletin\/","title":{"rendered":"\u00d6znitelik&#8217;ler ve Reflection&#8217;la C# Dilini \u0130htiya\u00e7lar\u0131n\u0131z Do\u011frultusunda Geni\u015fletin"},"content":{"rendered":"<p>&nbsp;&nbsp; C# anlat\u0131rken ne zaman konu \u00f6zniteliklere (<em>attributes<\/em>) gelse, bu konuyu ilk dinleyenler i\u00e7in konu hep havada kal\u0131r. \u201c<em>Kodunuzun i\u00e7erisine ekleyebilece\u011fim meta veriler mi!?<\/em>\u201d, \u201c<em>Bu meta veriler ne i\u015fime yarayacak ki?<\/em>\u201d Bu sorulara verdi\u011fim yan\u0131t ise biraz daha sab\u0131rl\u0131 olmalar\u0131 ve hemen ard\u0131ndan anlatt\u0131\u011f\u0131m reflection konusunu dinlemeleri oluyor.<\/p>\n\n\n\n<p>&nbsp;&nbsp; \u00d6znitelikler ve Reflection bir araya geldi\u011finde C# dilini ger\u00e7ekten de olduk\u00e7a g\u00fc\u00e7l\u00fc k\u0131l\u0131yor. \u00d6yle ki; bu ikisini kullanarak pek \u00e7ok noktada dil\u2019e yeni bir ekleme yapma, yeni bir anahtar kelime ihtiyac\u0131 ortadan kalk\u0131yor. System k\u00fct\u00fcphanesi alt\u0131nda yeralan <a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/system.serializableattribute.aspx\" target=\"_blank\" rel=\"noopener noreferrer\">SerializableAttribute<\/a> \u00f6zniteli\u011fini ele alal\u0131m \u00f6rne\u011fin; .Net\u2019in bir s\u0131n\u0131f\u0131n serile\u015ftirilebilip serile\u015ftirilemeyece\u011fine karar vermesini sa\u011flayan bu \u00f6znitelik sayesinde kendi s\u0131n\u0131f\u0131m\u0131z\u0131n serile\u015ftirme s\u0131ras\u0131ndaki davran\u0131\u015f\u0131n\u0131 kontrol edebiliyoruz. Bunun i\u00e7inde tek yapt\u0131\u011f\u0131m\u0131z <strong>SerializableAttribute<\/strong> \u00f6zniteli\u011fini s\u0131n\u0131f\u0131m\u0131z\u0131n \u00fczerine ekleme (ya da eklememek). Bu i\u015flevi \u00f6znitelikler kullanmadan nas\u0131l yapard\u0131k peki? C#\u2019\u0131n bir g\u00fcn bizim i\u015fimizi g\u00f6recek bu tarz bir i\u015flev kazanmas\u0131n\u0131, yani yeni bir anahtar kelime eklemesini, beklerdik.<\/p>\n\n\n\n<p>&nbsp;&nbsp; Konuyu daha fazla dalland\u0131rmadan \u00f6nce, isterseniz konuya yabanc\u0131 olanlar\u0131n\u0131z i\u00e7in \u00f6znitelik ve reflection kavramlar\u0131na k\u0131saca de\u011finelim;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u00d6znitelikler (Attributes)<\/h2>\n\n\n\n<p>&nbsp;&nbsp; Bir .Net uygulamas\u0131 kod, veri ve meta veri temel bile\u015fenlerinden olu\u015fur. En basit anlat\u0131m\u0131yla, C# \u00f6znitelikleri t\u00fcrler, kod, assembly, v.b. C# bile\u015fenlerine y\u00fcklenilen <em>meta verilerdir<\/em>. Temelde bu meta veriler program\u0131n\u0131z\u0131n i\u00e7erisine g\u00f6m\u00fclmektedir ve <em>ILDasm<\/em> ya da benzeri meta veri g\u00f6r\u00fcnt\u00fcleyicilerince g\u00f6r\u00fclebilir durumdad\u0131rlar.<\/p>\n\n\n\n<p>&nbsp; Tan\u0131mlanm\u0131\u015f\/tan\u0131mlanacak t\u00fcm \u00f6znitelikler abstract olan <strong>Attribute<\/strong> s\u0131n\u0131f\u0131ndan t\u00fcremek zorundad\u0131r. \u0130stenirse, tan\u0131mlanmalar\u0131 s\u0131ras\u0131nda, kullan\u0131labilece\u011fi alanlar\u0131 da (\u00f6rne\u011fin; bu \u00f6znitelik yaln\u0131zca s\u0131n\u0131flar i\u00e7in ya da yaln\u0131zca metodlar i\u00e7in kullan\u0131labilir) belirtebilirsiniz.<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; A\u015fa\u011f\u0131da \u00f6znitelikler i\u00e7in verilebilecek kullan\u0131m alanlar\u0131n\u0131 bulabilirsiniz;<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"\"><tbody><tr><td><strong>All<\/strong><\/td><td>\u00d6zniteli\u011fin \u015fa\u011f\u0131da s\u0131ralanan t\u00fcm bile\u015fenlerde kullan\u0131labilece\u011fini belirtir<\/td><\/tr><tr><td><strong>Assembly<\/strong><\/td><td>\u00d6zniteli\u011fin assembly\u2019nin kendisi i\u00e7in kullan\u0131labilece\u011fini belirtir.<\/td><\/tr><tr><td><strong>Class<\/strong><\/td><td>\u00d6zniteli\u011fin s\u0131n\u0131f i\u00e7in kullan\u0131labilece\u011fini belirtir<\/td><\/tr><tr><td><strong>ClassMember<\/strong><\/td><td>\u00d6zniteli\u011fin s\u0131n\u0131f, struct, enum, constructer, metod, \u00f6zellik (property), alan (field), olay (event), temsilci (delegate) ve aray\u00fczler i\u00e7in kullan\u0131labilece\u011fini belirtir<\/td><\/tr><tr><td><strong>Constructer<\/strong><\/td><td>\u00d6zniteli\u011fin constructer\u2019lar i\u00e7in kullan\u0131labilece\u011fini belirtir<\/td><\/tr><tr><td><strong>Delegate<\/strong><\/td><td>\u00d6zniteli\u011fin temsilciler i\u00e7in&nbsp; kullan\u0131labilece\u011fini belirtir<\/td><\/tr><tr><td><strong>Enum<\/strong><\/td><td>\u00d6zniteli\u011fin enumlar i\u00e7in kullan\u0131labilece\u011fini belirtir<\/td><\/tr><tr><td><strong>Event<\/strong><\/td><td>\u00d6zniteli\u011fin olaylar i\u00e7in kullan\u0131labilece\u011fini belirtir<\/td><\/tr><tr><td><strong>Field<\/strong><\/td><td>\u00d6zniteli\u011fin alanlar i\u00e7in kullan\u0131labilece\u011fini belirtir<\/td><\/tr><tr><td><strong>Interface<\/strong><\/td><td>\u00d6zniteli\u011fin aray\u00fczler i\u00e7in kullan\u0131labilece\u011fini belirtir<\/td><\/tr><tr><td><strong>Method<\/strong><\/td><td>\u00d6zniteli\u011fin metodlar i\u00e7in kullan\u0131labilece\u011fini belirtir<\/td><\/tr><tr><td><strong>Module<\/strong><\/td><td>\u00d6zniteli\u011fin moduller i\u00e7in kullan\u0131labilece\u011fini belirtir<\/td><\/tr><tr><td><strong>Parameter<\/strong><\/td><td>\u00d6zniteli\u011fin metod parametreleri i\u00e7in kullan\u0131labilece\u011fini belirtir<\/td><\/tr><tr><td><strong>Property<\/strong><\/td><td>\u00d6zniteli\u011fin \u00f6zellikler i\u00e7in kullan\u0131labilece\u011fini belirtir<\/td><\/tr><tr><td><strong>ReturnValue<\/strong><\/td><td>\u00d6zniteli\u011fin metodlar\u0131n d\u00f6n\u00fc\u015f de\u011ferleri i\u00e7in kullan\u0131labilece\u011fini belirtir<\/td><\/tr><tr><td><strong>Struct<\/strong><\/td><td>\u00d6zniteli\u011fin struct\u2019lar i\u00e7in kullan\u0131labilece\u011fini belirtir<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>&nbsp;&nbsp; \u0130\u015f mant\u0131\u011f\u0131 do\u011frultusunda birden \u00e7ok kullan\u0131m alan\u0131n\u0131n belirtilebilmesi de m\u00fcmk\u00fcnd\u00fcr.<\/p>\n\n\n\n<p>&nbsp;&nbsp; A\u015fa\u011f\u0131da \u00f6rnek bir \u00f6znitelik tan\u0131mlamas\u0131n\u0131 bulabilirsiniz;<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"1-4\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">[AttributeUsage(\nAttributeTargets.Class,\nAllowMultiple = false,\nInherited = false)]\npublic class OrnekAttribute : Attribute { }<\/pre>\n\n\n\n<p>&nbsp; Bu \u00f6rnekte, tan\u0131mlad\u0131\u011f\u0131m\u0131z \u00f6zniteli\u011fin ne \u015fekilde kullan\u0131lmas\u0131 gerekti\u011fi bilgisini 1. ve 4. sat\u0131rlar aras\u0131nda yer alan <strong>AttributeUsage<\/strong> \u00f6zel \u00f6zniteli\u011fi vas\u0131tas\u0131yla derleyiciye belirtmekteyiz. 2. sat\u0131rda yer alan <em>AttributeTargets.Class<\/em> parametresi yukar\u0131da vermi\u015f oldu\u011fum tablodan da g\u00f6r\u00fclece\u011fi gibi <em>OrnekAttribute<\/em> \u00f6zniteli\u011fimizin sadece s\u0131n\u0131f tan\u0131mlamalar\u0131nda kullan\u0131labilece\u011fini belirtmekte. 3. sat\u0131rda derleyiciye bir s\u0131n\u0131f \u00fczerinde bu \u00f6znitelikten ayn\u0131 anda sadece bir tane kullan\u0131mas\u0131na izin verildi\u011fini belirtmekte. 4. sat\u0131r ise bu \u00f6zniteli\u011fin ata s\u0131n\u0131flarda bulunsa bile tan\u0131mlanmad\u0131\u011f\u0131 s\u00fcrece kal\u0131t\u0131lan s\u0131n\u0131flarda ge\u00e7erli olmayaca\u011f\u0131n\u0131 (ba\u015fka bir deyi\u015fle tan\u0131ms\u0131z olaca\u011f\u0131n\u0131) belirtmektedir.<\/p>\n\n\n\n<p>&nbsp;&nbsp; Y\u0131kar\u0131da g\u00f6rd\u00fc\u011f\u00fcn\u00fcz basit \u00f6znitelik tan\u0131mlamas\u0131 d\u0131\u015f\u0131nda istenirse parametreler ve \u00f6zellikler (property) vas\u0131tas\u0131yla yaz\u0131l\u0131m geli\u015ftiriciden ek bilgi alan \u00f6zniteliklerde tasarlanabilir. Temelde bak\u0131lacak olursa \u00f6znitelikler\u2019de birer s\u0131n\u0131ft\u0131rlar, dolay\u0131s\u0131yla bir s\u0131n\u0131f ile yapabilece\u011finiz <u>her \u015feyi<\/u> (varsay\u0131lan ya da parametreli constructer, \u00f6zellikler, hatta metod ve aray\u00fcz kullan\u0131m\u0131) yapman\u0131z m\u00fcmk\u00fcn.<\/p>\n\n\n\n<p>&nbsp;&nbsp; \u00d6znitelikleri anlat\u0131rken tam da bu noktada ak\u0131llara yukar\u0131da sayd\u0131\u011f\u0131m sorular geliyor, \u00f6rne\u011fin : \u201c<em>Bu meta veriler ne i\u015fime yarayacak ki?<\/em>\u201d; yan\u0131t\u0131na gelmeden \u00f6nce bir de reflection nedir inceleyelim.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Yans\u0131ma (Reflection)<\/h2>\n\n\n\n<p>&nbsp;&nbsp; Programsal olarak bir programa eklenmi\u015f meta verilerin okunmas\u0131, <em>program\u0131n kendi yans\u0131mas\u0131na bakmas\u0131<\/em>, y\u00f6netimi k\u0131saca yans\u0131ma (<strong>reflection<\/strong>) olarak adland\u0131r\u0131lmaktad\u0131r. Reflection y\u00f6ntemiyle edinilen bu bilgiler kullan\u0131c\u0131ya g\u00f6sterilebilece\u011fi gibi program\u0131n i\u015f mant\u0131\u011f\u0131 i\u00e7erisinde de kullan\u0131labilir. Ba\u015fka bir deyi\u015fle, programa derleme s\u0131ras\u0131nda ekledi\u011fimiz <strong>meta verileri \u00e7al\u0131\u015fma zaman\u0131nda yorumlarayarak i\u015f ak\u0131\u015f\u0131m\u0131za y\u00f6n verebiliriz<\/strong>.<\/p>\n\n\n\n<p>&nbsp;&nbsp; Reflection konusunda de\u011finmem gereken bir \u00f6nemli noktada, derleme zaman\u0131nda sadece sizin belirledi\u011finiz \u00f6zniteliklerin programa eklenmedi\u011fidir. Reflection y\u00f6ntemiyle isterseniz .Net taraf\u0131ndan sizlere sunulan t\u00fcr bilgilerini de kullanabilirsiniz. \u0130stedi\u011finiz bir t\u00fcr\u00fcn metodlar\u0131, \u00f6zellikleri, alanlar\u0131 v.b. bilgileri de \u00e7al\u0131\u015fma zaman\u0131nda reflection ile bulunabilirsiniz. Hatta, bu bile\u015fenlere y\u00fcklenmi\u015f \u00f6znitelikler bile bulunabilirsiniz.<\/p>\n\n\n\n<p>&nbsp;&nbsp; Konuyu peki\u015ftirmek ad\u0131na elimizde a\u015fa\u011f\u0131daki gibi bir \u00f6\u011frenci s\u0131n\u0131f\u0131n\u0131n oldu\u011funu varsayal\u0131m;<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class Ogrenci {\n    public string Adi;\n    public string Bolum;\n}<\/pre>\n\n\n\n<p>&nbsp;&nbsp; A\u015fa\u011f\u0131daki kod par\u00e7ac\u0131\u011f\u0131 ile Ogrenci s\u0131n\u0131f\u0131m\u0131z i\u00e7erisindeki t\u00fcm alanlar\u0131 ekrana yazabiliriz;<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"2-4\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">Type ogrenciTuru = typeof(Ogrenci);\nFieldInfo[] ogrencialanlari = ogrenciTuru.GetFields(\n                                             BindingFlags.Public |\n                                             BindingFlags.Instance);\n\nforeach (FieldInfo ogrenciAlani in ogrencialanlari) {\n    Console.WriteLine(\"Alan :\" + ogrenciAlani.Name);\n}<\/pre>\n\n\n\n<p>&nbsp;&nbsp; Bu kod par\u00e7ac\u0131\u011f\u0131nda; ilk sat\u0131rda \u00f6\u011frenci t\u00fcr\u00fcne ula\u015f\u0131yoruz. Daha sonra ikinci sat\u0131rda Type s\u0131n\u0131f\u0131 i\u00e7erisinde yer alan <strong>GetFields<\/strong> metodunu kullanarak bu t\u00fcr i\u00e7erisindeki alan bilgilerine ula\u015f\u0131yoruz. GetFields metoduna verdi\u011fimiz <strong>BindingFlags<\/strong> parametreleri ise (3. ve 4. sat\u0131rlar) <em>public<\/em> olarak tan\u0131mlanm\u0131\u015f ve <em>static olmayan<\/em> alanlar\u0131n listelenmesini istedi\u011fimizi belirtiyoruz. Bu parametre ile oynayarak farkl\u0131 kombinasyonlarla de\u011fi\u015fik \u00f6zellikteki alanlar\u0131 da listeletmek m\u00fcmk\u00fcn. Kod par\u00e7ac\u0131\u011f\u0131m\u0131z\u0131n devam\u0131nda ise bu alanlar\u0131n isimlerini konsola yazd\u0131r\u0131yoruz. ogrenciTuru\u2019n\u00fc kullanarak t\u00fcre ait metodlar\u0131, \u00f6zellikleri hatta <em>\u00f6znitelikleri<\/em> bulabilmemiz m\u00fcmk\u00fcn.<\/p>\n\n\n\n<p>&nbsp;&nbsp; G\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi reflection y\u00f6ntemini kullanarak \u00e7al\u0131\u015fma zaman\u0131nda t\u00fcrler hakk\u0131nda bilgi edinmek olduk\u00e7a kolay. Bir ad\u0131m \u00f6tesinde ise a\u015fa\u011f\u0131daki kod par\u00e7ac\u0131\u011f\u0131nda oldu\u011fu gibi alanlar\u0131n de\u011ferlerini almakta m\u00fcmk\u00fcn :<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"13\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">var ogrenci = new Ogrenci {\n    Adi = \"Fatih Boy\",\n    Bolum = \"Bilgisayar M\u00fchendisli\u011fi\"\n};\n\nType ogrenciTuru = typeof(Ogrenci);\nFieldInfo[] ogrencialanlari = ogrenciTuru.GetFields(\n                                    BindingFlags.Public |\n                                    BindingFlags.Instance);\n\nforeach (FieldInfo ogrenciAlani in ogrencialanlari) {\n    Console.WriteLine(\"Alan :\" + ogrenciAlani.Name);\n    Console.WriteLine(\"De\u011fer :\" + ogrenciAlani.GetValue(ogrenci));\n    Console.WriteLine(\"******************\");\n}<\/pre>\n\n\n\n<p>&nbsp;&nbsp; 13. sat\u0131rda g\u00f6r\u00fcld\u00fc\u011f\u00fc gibi yap\u0131lmas\u0131 gereken ald\u0131\u011f\u0131m\u0131z alan bilgisini kullanarak ogrenci \u00f6rne\u011fi i\u00e7in <strong>GetValue<\/strong> metodu ile de\u011fer sorgulamak.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u00d6znitelikler + Reflection = Esnek bir Dil<\/h2>\n\n\n\n<p>&nbsp;&nbsp; \u00d6znitelikler, reflection\u2019la birle\u015fince yap\u0131labilecekler sadece hayal g\u00fcc\u00fcn\u00fczle s\u0131n\u0131rl\u0131 bence. \u00d6rne\u011fin; kullan\u0131c\u0131dan ald\u0131\u011f\u0131m\u0131z bilgilerle doldurdu\u011fumuz Ogrenci s\u0131n\u0131f\u0131nda <em>Adi<\/em> alan\u0131n\u0131n zorunlu oldu\u011funu varsayal\u0131m. Program\u0131m\u0131z i\u00e7erisinde bu alan\u0131n do\u011frulamas\u0131n\u0131 yaparken a\u015fa\u011f\u0131daki gibi bir kod yazar\u0131z;<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">if (string.IsNullOrEmpty(ogrenci.Adi)) {\n    throw new Exception(\"\u00d6\u011frenci ad\u0131 bo\u015f olamaz!\");\n}<\/pre>\n\n\n\n<p>&nbsp;&nbsp; Buradaki s\u0131k\u0131nt\u0131 her alan ve her do\u011frulama y\u00f6ntemi i\u00e7in bir kod eklenmesi gerekmesi. Do\u011frulanmas\u0131 gereken her yeni alan i\u00e7in buna benzer bir kodun eklenmesi gerekecektir. Genel ge\u00e7er bir \u00e7\u00f6z\u00fcm olmamas\u0131 nedeniyle de bu yol bizim i\u00e7in her zaman i\u00e7in ek maliyet anlam\u0131na gelecektir. Ke\u015fke C# i\u00e7erisinde zorunluluk kontrol\u00fc i\u00e7in bir anahtar kelime olsa dedi\u011fimiz yer tam bu ek maliyetlerle olduk\u00e7a zaman kaybetti\u011fimiz anlard\u0131r.<\/p>\n\n\n\n<p>&nbsp;&nbsp; Bu noktada a\u015fa\u011f\u0131daki gibi bir kod yazd\u0131\u011f\u0131n\u0131z\u0131 d\u00fc\u015f\u00fcn\u00fcn;<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"2\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class Ogrenci {\n    [ZorunluAlan]\n    public string Adi;\n\n    public string Bolum;\n}<\/pre>\n\n\n\n<p>&nbsp;&nbsp; Bu \u00f6rnek kodda g\u00f6r\u00fcld\u00fc\u011f\u00fc gibi yeni bir anahtar kelimeye ihtiya\u00e7 kalmadan Adi alan\u0131n\u0131 zorunlu olarak i\u015faretleyebiliyorum. <strong>ZorunluAlan<\/strong> \u00f6zniteli\u011fi tan\u0131m\u0131n\u0131 a\u015fa\u011f\u0131da bulabilirsiniz;<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">[AttributeUsage(\n    AttributeTargets.Field,\n    AllowMultiple = false,\n    Inherited = true)]\npublic class ZorunluAlanAttribute : Attribute { }<\/pre>\n\n\n\n<p>Zorunlu alan olarak i\u015fretledim; peki bu meta veriyi nas\u0131l kullanabilirim? Cevap, tabiki reflection kullanarak;<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"10\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public static class ZorunlulukKontrolu {\n  public static bool Dogrula(object dogrulanacakOrnek) {\n    Type dogrulamacakTur = dogrulanacakOrnek.GetType();\n\n    FieldInfo[] dogrulanacakTurAlanlari = dogrulamacakTur.GetFields(\n                                            BindingFlags.Public |\n                                            BindingFlags.Instance);\n\n    foreach (FieldInfo dogrulanacakTurAlani in dogrulanacakTurAlanlari) {\n        object[] zorunluAlanOznitelikleri = dogrulanacakTurAlani.GetCustomAttributes(typeof(ZorunluAlanAttribute), true);\n\n        if (zorunluAlanOznitelikleri.Length != 0) {\n            string alanDegeri = dogrulanacakTurAlani.GetValue(dogrulanacakOrnek) as string;\n\n            if (string.IsNullOrEmpty(alanDegeri)) {\n                return false;\n            }\n        }\n    }\n\n    return true;\n  }\n}<\/pre>\n\n\n\n<p>&nbsp;&nbsp; Asl\u0131nda, ZorunlulukKontrolu s\u0131n\u0131f\u0131 i\u00e7erisindeki kodun b\u00fcy\u00fck bir b\u00f6l\u00fcm\u00fc hakk\u0131nda reflection konusunu anlat\u0131rken fikir sahibi oldu\u011funuzu d\u00fc\u015f\u00fcn\u00fcyorum : parametrenin t\u00fcr bilgisi al\u0131n\u0131r (3.sat\u0131r), i\u00e7erisindeki public alanlar sorgulan\u0131r (5.,6.,7. sat\u0131rlar) ve bulunan bu alanlar bir d\u00f6ng\u00fc i\u00e7erisinde d\u00f6n\u00fcl\u00fcr.<\/p>\n\n\n\n<p>&nbsp;&nbsp; D\u00f6ng\u00fc i\u00e7erisindeki kodda ise (11.sat\u0131rdan itibaren); alan bilgisi \u00fczerinden bu alan i\u00e7in tan\u0131mlanm\u0131\u015f olan bir <em>ZorunluAlanAttribute <\/em>\u00f6zniteli\u011fi olup olmad\u0131\u011f\u0131 sorgulan\u0131r (11. sat\u0131r). E\u011fer alan zorunluAlan olarak i\u015faretlendi ise (13. sat\u0131r) de\u011feri bulunarak (14. sat\u0131r) bo\u015f olup olmad\u0131\u011f\u0131 kontrol edilir (15. sat\u0131r), i\u015faretlenmi\u015f fakat de\u011feri olmayan ilk alan bulundu\u011funda da metod <em>false<\/em> de\u011feri ile d\u00f6ner (16. sat\u0131r). Herhangi bir do\u011frulama hatas\u0131 olmamas\u0131 durumunda ise metod <em>true<\/em> de\u011fer d\u00f6ner (21.sat\u0131r).<\/p>\n\n\n\n<p>&nbsp;&nbsp; Bu s\u0131n\u0131f\u0131 program\u0131n\u0131z i\u00e7erisinde a\u015fa\u011f\u0131daki \u015fekilde kullanabilir ve herhangi bir ogrenci \u00f6rne\u011fini do\u011frulayabilirsiniz.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"1\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">if (!ZorunlulukKontrolu.Dogrula(ogrenci)) {\n    throw new Exception(\"\u00d6\u011frenci bilgileri do\u011frulamadan ge\u00e7emedi!\");\n}<\/pre>\n\n\n\n<p>&nbsp;&nbsp; Reflection ve \u00f6znitelikler kullanarak yazd\u0131\u011f\u0131m\u0131z kod biraz daha uzun olabilir; ama bize sundu\u011fu esneklik ger\u00e7ekten de \u00e7ok b\u00fcy\u00fck. \u00d6rne\u011fin; Ogrenci s\u0131n\u0131f\u0131nda <em>Bolum<\/em> alan\u0131 i\u00e7inde zorunluluk kontrol\u00fc yapmak istersek eklememiz gereken tek bir sat\u0131r olacakt\u0131r (a\u015fa\u011f\u0131daki \u00f6rnekte yer alan 5.sat\u0131r);<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"5\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class Ogrenci {\n    [ZorunluAlan]\n    public string Adi;\n\n    [ZorunluAlan]\n    public string Bolum;\n}<\/pre>\n\n\n\n<p>&nbsp;&nbsp; Bu noktadan sonra s\u0131n\u0131f\u0131m\u0131z i\u00e7erisine ekleyece\u011fimiz t\u00fcm <em>string<\/em> alanlar i\u00e7in zorunluluk kontrol\u00fc yapmak tek bir sat\u0131r eklemekle m\u00fcmk\u00fcn olabilecektir.<\/p>\n\n\n\n<p>&nbsp;&nbsp; Bu y\u00f6ntemin bir ba\u015fka g\u00fczel taraf\u0131 da; art\u0131k <strong>herhangi bir s\u0131n\u0131f i\u00e7erisindeki string t\u00fcr\u00fcnden herhangi bir alan i\u00e7in zorunluluk kontrol\u00fc yapabiliyor<\/strong> olman\u0131zd\u0131r. \u00d6rnek \u00fczerinde biraz daha \u00e7al\u0131\u015f\u0131larak t\u00fcm veri t\u00fcrleri i\u00e7in \u00e7al\u0131\u015fabilecek bir zorunluluk kontrol\u00fc yap\u0131labilir. Hatta birden fazla \u00f6znitelik tan\u0131mlamas\u0131 kullan\u0131larak zorunluluk d\u0131\u015f\u0131nda format, de\u011fer aral\u0131\u011f\u0131, ileri tarih kontrol\u00fc v.b. kontrolleri yapabilir genel ge\u00e7er do\u011frulama kodlar\u0131 olu\u015fturulabilir.<\/p>\n\n\n\n<p>&nbsp;&nbsp; G\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi, ihtiyac\u0131m\u0131z olan genel ge\u00e7er bir zorunluluk kontrol\u00fc \u00f6zelli\u011fini C# dilinin yap\u0131s\u0131na dokunmadan, yeni bir anahtar kelime eklemeden, rahatl\u0131kla yapabilmekteyiz. \u0130\u015fte bu y\u00fczden \u00f6znitelikleri ve reflection\u2019\u0131 bu kadar \u00e7ok seviyorum \ud83d\ude42<\/p>","protected":false},"excerpt":{"rendered":"<p>&nbsp;&nbsp; C# anlat\u0131rken ne zaman konu \u00f6zniteliklere (attributes) gelse, bu konuyu ilk dinleyenler i\u00e7in konu hep havada kal\u0131r. \u201cKodunuzun i\u00e7erisine ekleyebilece\u011fim meta veriler mi!?\u201d, \u201cBu meta veriler ne i\u015fime yarayacak ki?\u201d Bu sorulara verdi\u011fim yan\u0131t ise biraz daha sab\u0131rl\u0131 olmalar\u0131 ve hemen ard\u0131ndan anlatt\u0131\u011f\u0131m reflection konusunu dinlemeleri oluyor. &nbsp;&nbsp; \u00d6znitelikler ve Reflection bir araya geldi\u011finde&#8230;<\/p>\n<p><a class=\"read-more\" href=\"https:\/\/fatihboy.com\/en\/oznitelikler-ve-reflectionla-csharp-dilini-ihtiyaclariniz-dogrultusunda-genisletin\/\">Read More<\/a><\/p>","protected":false},"author":1,"featured_media":16800,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[77,28],"tags":[105,41,74],"class_list":["post-696","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-csharp","category-turkce","tag-attribute","tag-c","tag-reflection"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.7 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>\u00d6znitelik&#039;ler ve Reflection&#039;la C# Dilini \u0130htiya\u00e7lar\u0131n\u0131z Do\u011frultusunda Geni\u015fletin - Fatih Boy<\/title>\n<meta name=\"description\" content=\"C# programlama dili, sahip oldu\u011fu \u00f6znitelikler ve reflection gibi \u00f6zellikleri ile birlikte ihtiya\u00e7lar\u0131na uyum sa\u011flayabilmektedir. Detaylar makalemde...\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihboy.com\/en\/oznitelikler-ve-reflectionla-csharp-dilini-ihtiyaclariniz-dogrultusunda-genisletin\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u00d6znitelik&#039;ler ve Reflection&#039;la C# Dilini \u0130htiya\u00e7lar\u0131n\u0131z Do\u011frultusunda Geni\u015fletin - Fatih Boy\" \/>\n<meta property=\"og:description\" content=\"C# programlama dili, sahip oldu\u011fu \u00f6znitelikler ve reflection gibi \u00f6zellikleri ile birlikte ihtiya\u00e7lar\u0131na uyum sa\u011flayabilmektedir. Detaylar makalemde...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihboy.com\/en\/oznitelikler-ve-reflectionla-csharp-dilini-ihtiyaclariniz-dogrultusunda-genisletin\/\" \/>\n<meta property=\"og:site_name\" content=\"Fatih Boy\" \/>\n<meta property=\"article:published_time\" content=\"2010-09-04T19:28:30+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/09\/189.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"683\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Fatih Boy\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Boy\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihboy.com\/oznitelikler-ve-reflectionla-csharp-dilini-ihtiyaclariniz-dogrultusunda-genisletin\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihboy.com\/oznitelikler-ve-reflectionla-csharp-dilini-ihtiyaclariniz-dogrultusunda-genisletin\/\"},\"author\":{\"name\":\"Fatih Boy\",\"@id\":\"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158\"},\"headline\":\"\u00d6znitelik&#8217;ler ve Reflection&#8217;la C# Dilini \u0130htiya\u00e7lar\u0131n\u0131z Do\u011frultusunda Geni\u015fletin\",\"datePublished\":\"2010-09-04T19:28:30+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihboy.com\/oznitelikler-ve-reflectionla-csharp-dilini-ihtiyaclariniz-dogrultusunda-genisletin\/\"},\"wordCount\":1827,\"commentCount\":2,\"publisher\":{\"@id\":\"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158\"},\"image\":{\"@id\":\"https:\/\/fatihboy.com\/oznitelikler-ve-reflectionla-csharp-dilini-ihtiyaclariniz-dogrultusunda-genisletin\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/09\/189.jpg\",\"keywords\":[\"Attribute\",\"C#\",\"Reflection\"],\"articleSection\":[\"C#\",\"T\u00fcrk\u00e7e\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihboy.com\/oznitelikler-ve-reflectionla-csharp-dilini-ihtiyaclariniz-dogrultusunda-genisletin\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihboy.com\/oznitelikler-ve-reflectionla-csharp-dilini-ihtiyaclariniz-dogrultusunda-genisletin\/\",\"url\":\"https:\/\/fatihboy.com\/oznitelikler-ve-reflectionla-csharp-dilini-ihtiyaclariniz-dogrultusunda-genisletin\/\",\"name\":\"\u00d6znitelik'ler ve Reflection'la C# Dilini \u0130htiya\u00e7lar\u0131n\u0131z Do\u011frultusunda Geni\u015fletin - Fatih Boy\",\"isPartOf\":{\"@id\":\"https:\/\/fatihboy.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/fatihboy.com\/oznitelikler-ve-reflectionla-csharp-dilini-ihtiyaclariniz-dogrultusunda-genisletin\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/fatihboy.com\/oznitelikler-ve-reflectionla-csharp-dilini-ihtiyaclariniz-dogrultusunda-genisletin\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/09\/189.jpg\",\"datePublished\":\"2010-09-04T19:28:30+00:00\",\"description\":\"C# programlama dili, sahip oldu\u011fu \u00f6znitelikler ve reflection gibi \u00f6zellikleri ile birlikte ihtiya\u00e7lar\u0131na uyum sa\u011flayabilmektedir. Detaylar makalemde...\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihboy.com\/oznitelikler-ve-reflectionla-csharp-dilini-ihtiyaclariniz-dogrultusunda-genisletin\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihboy.com\/oznitelikler-ve-reflectionla-csharp-dilini-ihtiyaclariniz-dogrultusunda-genisletin\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/fatihboy.com\/oznitelikler-ve-reflectionla-csharp-dilini-ihtiyaclariniz-dogrultusunda-genisletin\/#primaryimage\",\"url\":\"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/09\/189.jpg\",\"contentUrl\":\"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/09\/189.jpg\",\"width\":1024,\"height\":683},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihboy.com\/oznitelikler-ve-reflectionla-csharp-dilini-ihtiyaclariniz-dogrultusunda-genisletin\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/fatihboy.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u00d6znitelik&#8217;ler ve Reflection&#8217;la C# Dilini \u0130htiya\u00e7lar\u0131n\u0131z Do\u011frultusunda Geni\u015fletin\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihboy.com\/#website\",\"url\":\"https:\/\/fatihboy.com\/\",\"name\":\"Fatih Boy\",\"description\":\"Ki\u015fisel Web Sitesi\",\"publisher\":{\"@id\":\"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihboy.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158\",\"name\":\"Fatih Boy\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/fatihboy.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/5b3de123ad95a2ffe30b75a54cee98b55f65185c6d6805b35088a3d945f2feb4?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/5b3de123ad95a2ffe30b75a54cee98b55f65185c6d6805b35088a3d945f2feb4?s=96&d=mm&r=g\",\"caption\":\"Fatih Boy\"},\"logo\":{\"@id\":\"https:\/\/fatihboy.com\/#\/schema\/person\/image\/\"},\"sameAs\":[\"https:\/\/fatihboy.com\"],\"url\":\"https:\/\/fatihboy.com\/en\/author\/fatih\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"\u00d6znitelik'ler ve Reflection'la C# Dilini \u0130htiya\u00e7lar\u0131n\u0131z Do\u011frultusunda Geni\u015fletin - Fatih Boy","description":"C# programlama dili, sahip oldu\u011fu \u00f6znitelikler ve reflection gibi \u00f6zellikleri ile birlikte ihtiya\u00e7lar\u0131na uyum sa\u011flayabilmektedir. Detaylar makalemde...","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihboy.com\/en\/oznitelikler-ve-reflectionla-csharp-dilini-ihtiyaclariniz-dogrultusunda-genisletin\/","og_locale":"en_US","og_type":"article","og_title":"\u00d6znitelik'ler ve Reflection'la C# Dilini \u0130htiya\u00e7lar\u0131n\u0131z Do\u011frultusunda Geni\u015fletin - Fatih Boy","og_description":"C# programlama dili, sahip oldu\u011fu \u00f6znitelikler ve reflection gibi \u00f6zellikleri ile birlikte ihtiya\u00e7lar\u0131na uyum sa\u011flayabilmektedir. Detaylar makalemde...","og_url":"https:\/\/fatihboy.com\/en\/oznitelikler-ve-reflectionla-csharp-dilini-ihtiyaclariniz-dogrultusunda-genisletin\/","og_site_name":"Fatih Boy","article_published_time":"2010-09-04T19:28:30+00:00","og_image":[{"width":1024,"height":683,"url":"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/09\/189.jpg","type":"image\/jpeg"}],"author":"Fatih Boy","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Fatih Boy","Est. reading time":"10 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihboy.com\/oznitelikler-ve-reflectionla-csharp-dilini-ihtiyaclariniz-dogrultusunda-genisletin\/#article","isPartOf":{"@id":"https:\/\/fatihboy.com\/oznitelikler-ve-reflectionla-csharp-dilini-ihtiyaclariniz-dogrultusunda-genisletin\/"},"author":{"name":"Fatih Boy","@id":"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158"},"headline":"\u00d6znitelik&#8217;ler ve Reflection&#8217;la C# Dilini \u0130htiya\u00e7lar\u0131n\u0131z Do\u011frultusunda Geni\u015fletin","datePublished":"2010-09-04T19:28:30+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihboy.com\/oznitelikler-ve-reflectionla-csharp-dilini-ihtiyaclariniz-dogrultusunda-genisletin\/"},"wordCount":1827,"commentCount":2,"publisher":{"@id":"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158"},"image":{"@id":"https:\/\/fatihboy.com\/oznitelikler-ve-reflectionla-csharp-dilini-ihtiyaclariniz-dogrultusunda-genisletin\/#primaryimage"},"thumbnailUrl":"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/09\/189.jpg","keywords":["Attribute","C#","Reflection"],"articleSection":["C#","T\u00fcrk\u00e7e"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihboy.com\/oznitelikler-ve-reflectionla-csharp-dilini-ihtiyaclariniz-dogrultusunda-genisletin\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/fatihboy.com\/oznitelikler-ve-reflectionla-csharp-dilini-ihtiyaclariniz-dogrultusunda-genisletin\/","url":"https:\/\/fatihboy.com\/oznitelikler-ve-reflectionla-csharp-dilini-ihtiyaclariniz-dogrultusunda-genisletin\/","name":"\u00d6znitelik'ler ve Reflection'la C# Dilini \u0130htiya\u00e7lar\u0131n\u0131z Do\u011frultusunda Geni\u015fletin - Fatih Boy","isPartOf":{"@id":"https:\/\/fatihboy.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/fatihboy.com\/oznitelikler-ve-reflectionla-csharp-dilini-ihtiyaclariniz-dogrultusunda-genisletin\/#primaryimage"},"image":{"@id":"https:\/\/fatihboy.com\/oznitelikler-ve-reflectionla-csharp-dilini-ihtiyaclariniz-dogrultusunda-genisletin\/#primaryimage"},"thumbnailUrl":"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/09\/189.jpg","datePublished":"2010-09-04T19:28:30+00:00","description":"C# programlama dili, sahip oldu\u011fu \u00f6znitelikler ve reflection gibi \u00f6zellikleri ile birlikte ihtiya\u00e7lar\u0131na uyum sa\u011flayabilmektedir. Detaylar makalemde...","breadcrumb":{"@id":"https:\/\/fatihboy.com\/oznitelikler-ve-reflectionla-csharp-dilini-ihtiyaclariniz-dogrultusunda-genisletin\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihboy.com\/oznitelikler-ve-reflectionla-csharp-dilini-ihtiyaclariniz-dogrultusunda-genisletin\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/fatihboy.com\/oznitelikler-ve-reflectionla-csharp-dilini-ihtiyaclariniz-dogrultusunda-genisletin\/#primaryimage","url":"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/09\/189.jpg","contentUrl":"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/09\/189.jpg","width":1024,"height":683},{"@type":"BreadcrumbList","@id":"https:\/\/fatihboy.com\/oznitelikler-ve-reflectionla-csharp-dilini-ihtiyaclariniz-dogrultusunda-genisletin\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/fatihboy.com\/"},{"@type":"ListItem","position":2,"name":"\u00d6znitelik&#8217;ler ve Reflection&#8217;la C# Dilini \u0130htiya\u00e7lar\u0131n\u0131z Do\u011frultusunda Geni\u015fletin"}]},{"@type":"WebSite","@id":"https:\/\/fatihboy.com\/#website","url":"https:\/\/fatihboy.com\/","name":"Fatih Boy","description":"Ki\u015fisel Web Sitesi","publisher":{"@id":"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihboy.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158","name":"Fatih Boy","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/fatihboy.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/5b3de123ad95a2ffe30b75a54cee98b55f65185c6d6805b35088a3d945f2feb4?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/5b3de123ad95a2ffe30b75a54cee98b55f65185c6d6805b35088a3d945f2feb4?s=96&d=mm&r=g","caption":"Fatih Boy"},"logo":{"@id":"https:\/\/fatihboy.com\/#\/schema\/person\/image\/"},"sameAs":["https:\/\/fatihboy.com"],"url":"https:\/\/fatihboy.com\/en\/author\/fatih\/"}]}},"brizy_media":[],"_links":{"self":[{"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/posts\/696","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/comments?post=696"}],"version-history":[{"count":0,"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/posts\/696\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/media\/16800"}],"wp:attachment":[{"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/media?parent=696"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/categories?post=696"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/tags?post=696"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}