﻿
{"id":6011,"date":"2017-04-18T23:50:11","date_gmt":"2017-04-18T23:50:11","guid":{"rendered":"http:\/\/www.gencayyildiz.com\/blog\/?p=6011"},"modified":"2017-04-18T23:50:11","modified_gmt":"2017-04-18T23:50:11","slug":"cta-implicit-ve-explicit-operatorlerinin-asiri-yuklenmesi","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/cta-implicit-ve-explicit-operatorlerinin-asiri-yuklenmesi\/","title":{"rendered":"C#&#8217;ta Implicit ve Explicit Operat\u00f6rlerinin A\u015f\u0131r\u0131 Y\u00fcklenmesi"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p>C#&#8217;ta bilin\u00e7li ve bilin\u00e7siz olmak \u00fczere iki t\u00fcr veri d\u00f6n\u00fc\u015f\u00fcm\u00fc s\u00f6z konusudur. Bilin\u00e7siz olarak yap\u0131lan t\u00fcr d\u00f6n\u00fc\u015f\u00fcm\u00fc <em><strong>Implicit Conversion<\/strong><\/em> \u015feklinde tarif edilirken, bilin\u00e7li d\u00f6n\u00fc\u015f\u00fcme ise <em><strong>Explicit Conversion<\/strong><\/em> diye nitelendirilmektedir. Hatta biliyorsunuz ki, Implicit Conversion&#8217;da herhangi bir operat\u00f6r yahut ek bir syntax kullanmazken, Explicist Conversion&#8217;da &#8220;()&#8221; &#8211; Cast operat\u00f6r\u00fc kullan\u0131lmaktad\u0131r.<\/p>\n<p>Hatta konuya giri\u015fi ad\u0131m ad\u0131m yaparak bu iki d\u00f6n\u00fc\u015f\u00fcm\u00fc a\u015fa\u011f\u0131da kodsal olarak somutla\u015ft\u0131ral\u0131m, bir yandan bahsedilenleri hat\u0131rlayal\u0131m bir yandan da konumuzu ele alal\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n            #region Implicit Conversion\r\n            int x = 135;\r\n            long y = x;\r\n            #endregion\r\n<\/pre>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n            #region Explicit Conversation\r\n            long x = 1000;\r\n            int y = (int)x;\r\n            #endregion\r\n<\/pre>\n<p>Hemen hemen her g\u00fcn y\u00fczlerce kez kullad\u0131\u011f\u0131n\u0131z yap\u0131lar&#8230; Implicit Conversion ve Explicit Conversation yakla\u015f\u0131mlar\u0131n\u0131 hat\u0131rlad\u0131n\u0131z de\u011fil mi&#8230;<\/p>\n<p>Hatta bu d\u00f6n\u00fc\u015f\u00fcmleri kal\u0131t\u0131m s\u00f6z konusu oldu\u011fu durumlarda kullanmaktay\u0131z. Base Class referans\u0131na Derived Class nesnesi atarsak e\u011fer Implicit Conversion, Base Class&#8217;lar\u0131 Derived Class&#8217;lara Cast edersekte Explicit Conversion kullanmaktay\u0131z. A\u015fa\u011f\u0131daki gibi;<\/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            #region Implicit Conversion\r\n            Canli cc = new Insan();\r\n            #endregion\r\n            #region Explicit Conversation\r\n            Canli c = new Insan();\r\n            Insan i = (Insan)c;\r\n            #endregion\r\n        }\r\n    }\r\n    class Canli { }\r\n    class Insan : Canli { }\r\n<\/pre>\n<p>\u015eimdi yava\u015f yava\u015f as\u0131l konumuza do\u011fru gelelim ve \u015fu soruyu kendimize soral\u0131m.<\/p>\n<p>&#8220;<em>Aralar\u0131nda kal\u0131t\u0131msal ili\u015fki olmayan s\u0131n\u0131flar aras\u0131nda her iki d\u00f6n\u00fc\u015f\u00fcmde yapt\u0131\u011f\u0131m\u0131z i\u015flemleri yapmaya \u00e7al\u0131\u015f\u0131rsak ne olur?<\/em>&#8221;<\/p>\n<p>Hi\u00e7 d\u00fc\u015f\u00fcnd\u00fcn\u00fcz m\u00fc?<\/p>\n<p>Biliyorum&#8230; Bu soruya hi\u00e7 d\u00fc\u015f\u00fcnmeden hata al\u0131r\u0131z cevab\u0131n\u0131 verdi\u011finizi duyuyorum. Hatta a\u015fa\u011f\u0131daki ekran g\u00f6r\u00fcnt\u00fcs\u00fc ile s\u00f6z\u00fcn\u00fczde ne kadar hakl\u0131 oldu\u011funuzuda g\u00f6rmenizi istiyorum&#8230;<br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/04\/Cta-Implicit-ve-Explicit-Operat\u00f6rlerinin-A\u015f\u0131r\u0131-Y\u00fcklenmesi.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-6023\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/04\/Cta-Implicit-ve-Explicit-Operat\u00f6rlerinin-A\u015f\u0131r\u0131-Y\u00fcklenmesi.png\" alt=\"C#'ta Implicit ve Explicit Operat\u00f6rlerinin A\u015f\u0131r\u0131 Y\u00fcklenmesi\" width=\"298\" height=\"415\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/04\/Cta-Implicit-ve-Explicit-Operat\u00f6rlerinin-A\u015f\u0131r\u0131-Y\u00fcklenmesi.png 298w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/04\/Cta-Implicit-ve-Explicit-Operat\u00f6rlerinin-A\u015f\u0131r\u0131-Y\u00fcklenmesi-215x300.png 215w\" sizes=\"auto, (max-width: 298px) 100vw, 298px\" \/><\/a><\/p>\n<p>E\u011fer ki aralar\u0131nda ili\u015fki olmayan s\u0131n\u0131flar aras\u0131nda Implicit ve Explicit Conversion yapmak istiyorsan\u0131z bu s\u0131n\u0131flar\u0131n d\u00f6n\u00fc\u015f\u00fcm antla\u015fmalar\u0131n\u0131 olu\u015fturman\u0131z gerekecektir. Yani demek istedi\u011fim custom(\u00f6zel) conversion tan\u0131mlaman\u0131z gerekecektir. Yani daha da a\u00e7\u0131klay\u0131c\u0131 konu\u015fmam\u0131z gerekirse Implicit ve Explicit operat\u00f6rlerinin a\u015f\u0131r\u0131 y\u00fcklenmesinden bahsediyorum.<\/p>\n<p>E\u011fer ki aralar\u0131nda ili\u015fki olmayan s\u0131n\u0131flar\u0131n Implicit Conversion yapmas\u0131n\u0131 istiyorsak e\u011fer implicit keyword\u00fcn\u00fc(implicit operator), yok e\u011fer Explicit Conversion yapmas\u0131n\u0131 istiyorsakta explicit keyword\u00fcn\u00fc(explicit operator) kullanarak birazdan teknik olarak ele alaca\u011f\u0131m\u0131z \u015fekilde \u00e7al\u0131\u015fma yapmam\u0131z gerekecektir.<\/p>\n<p>\u00d6ncelikle, k\u00e2h implicit operator k\u00e2h explicit operator metodundan hangisi olursa olsun yap\u0131sal olarak hangi mant\u0131kta \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 ele alal\u0131m.<br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/04\/Cta-Implicit-ve-Explicit-Operat\u00f6rlerinin-A\u015f\u0131r\u0131-Y\u00fcklenmesi-1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-6025\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/04\/Cta-Implicit-ve-Explicit-Operat\u00f6rlerinin-A\u015f\u0131r\u0131-Y\u00fcklenmesi-1.png\" alt=\"C#'ta Implicit ve Explicit Operat\u00f6rlerinin A\u015f\u0131r\u0131 Y\u00fcklenmesi.PNG\" width=\"379\" height=\"246\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/04\/Cta-Implicit-ve-Explicit-Operat\u00f6rlerinin-A\u015f\u0131r\u0131-Y\u00fcklenmesi-1.png 379w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/04\/Cta-Implicit-ve-Explicit-Operat\u00f6rlerinin-A\u015f\u0131r\u0131-Y\u00fcklenmesi-1-300x195.png 300w\" sizes=\"auto, (max-width: 379px) 100vw, 379px\" \/><\/a><br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/04\/Cta-Implicit-ve-Explicit-Operat\u00f6rlerinin-A\u015f\u0131r\u0131-Y\u00fcklenmesi-2.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/04\/Cta-Implicit-ve-Explicit-Operat\u00f6rlerinin-A\u015f\u0131r\u0131-Y\u00fcklenmesi-2.png\" alt=\"C#&#039;ta Implicit ve Explicit Operat\u00f6rlerinin A\u015f\u0131r\u0131 Y\u00fcklenmesi.PNG\" width=\"226\" height=\"72\" class=\"aligncenter size-full wp-image-6031\" \/><\/a><br \/>\n\u015eimdi bu konuda a\u015fa\u011f\u0131daki iki s\u0131n\u0131f\u0131 ele alarak bir ka\u00e7 \u00f6rnek ger\u00e7ekle\u015ftirelim.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class Koordinat\r\n    {\r\n        public int X { get; set; }\r\n        public int Y { get; set; }\r\n    }\r\n\r\n    class Lokasyon\r\n    {\r\n        public double X { get; set; }\r\n        public double Y { get; set; }\r\n    }\r\n<\/pre>\n<ul>\n<li>Koordinat s\u0131n\u0131f\u0131n\u0131 Lokasyon&#8217;a implicit \u00e7evir,\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class Koordinat\r\n    {\r\n        public int X { get; set; }\r\n        public int Y { get; set; }\r\n        public static implicit operator Lokasyon(Koordinat k)\r\n        {\r\n            return new Lokasyon { X = k.X, Y = k.Y };\r\n        }\r\n    }\r\n<\/pre>\n<p>Kullan\u0131m\u0131;<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nLokasyon l = new Koordinat();\r\n<\/pre>\n<\/li>\n<li>Koordinat s\u0131n\u0131f\u0131n\u0131 Lokasyon&#8217;a explicit \u00e7evir,\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class Koordinat\r\n    {\r\n        public int X { get; set; }\r\n        public int Y { get; set; }\r\n        public static explicit operator Lokasyon(Koordinat k)\r\n        {\r\n            return new Lokasyon { X = k.X, Y = k.Y };\r\n        }\r\n    }\r\n<\/pre>\n<p>Kullan\u0131m\u0131;<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nLokasyon l = (Lokasyon)new Koordinat();\r\n<\/pre>\n<\/li>\n<li>Lokasyon s\u0131n\u0131f\u0131n\u0131 hem Koorinat&#8217;a hem de double tipine implicit \u00e7evir,\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class Lokasyon\r\n    {\r\n        public double X { get; set; }\r\n        public double Y { get; set; }\r\n        public static implicit operator Koordinat(Lokasyon l)\r\n        {\r\n            return new Koordinat { X = (int)l.X, Y = (int)l.Y };\r\n        }\r\n        public static implicit operator double(Lokasyon l)\r\n        {\r\n            return l.X;\r\n        }\r\n    }\r\n<\/pre>\n<p>Kullan\u0131m\u0131;<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nKoordinat k = new Lokasyon();\r\ndouble i = new Lokasyon();\r\n<\/pre>\n<\/li>\n<li>Lokasyon s\u0131n\u0131f\u0131n\u0131 hem Koorinat&#8217;a hem de double tipine explicit \u00e7evir,\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class Lokasyon\r\n    {\r\n        public double X { get; set; }\r\n        public double Y { get; set; }\r\n        public static explicit operator Koordinat(Lokasyon l)\r\n        {\r\n            return new Koordinat { X = (int)l.X, Y = (int)l.Y };\r\n        }\r\n        public static explicit operator double(Lokasyon l)\r\n        {\r\n            return l.X;\r\n        }\r\n    }\r\n<\/pre>\n<p>Kullan\u0131m\u0131;<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nKoordinat k = (Koordinat)new Lokasyon();\r\ndouble i = (double)new Lokasyon();\r\n<\/pre>\n<\/li>\n<li>Koordinat ve Lokasyon s\u0131n\u0131flar\u0131n\u0131 s\u0131ras\u0131yla double ve bool t\u00fcrlerine implicit \u00e7evir.\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class Koordinat\r\n    {\r\n        public int X { get; set; }\r\n        public int Y { get; set; }\r\n        public static implicit operator double(Koordinat k)\r\n        {\r\n            return k.X * k.Y;\r\n        }\r\n    }\r\n\r\n    class Lokasyon\r\n    {\r\n        public double X { get; set; }\r\n        public double Y { get; set; }\r\n        public static implicit operator bool(Lokasyon l)\r\n        {\r\n            return true;\r\n        }\r\n    }\r\n<\/pre>\n<p>Kullan\u0131m\u0131;<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\ndouble d = new Koordinat();\r\nbool b = new Lokasyon();\r\n<\/pre>\n<\/li>\n<li>Koordinat ve Lokasyon s\u0131n\u0131flar\u0131n\u0131 s\u0131ras\u0131yla double ve bool t\u00fcrlerine explicit \u00e7evir.\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class Koordinat\r\n    {\r\n        public int X { get; set; }\r\n        public int Y { get; set; }\r\n        public static explicit operator double(Koordinat k)\r\n        {\r\n            return k.X * k.Y;\r\n        }\r\n    }\r\n\r\n    class Lokasyon\r\n    {\r\n        public double X { get; set; }\r\n        public double Y { get; set; }\r\n        public static explicit operator bool(Lokasyon l)\r\n        {\r\n            return true;\r\n        }\r\n    }\r\n<\/pre>\n<p>Kullan\u0131m\u0131;<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\ndouble d = (double)new Koordinat();\r\nbool b = (bool)new Lokasyon();\r\n<\/pre>\n<\/li>\n<\/ul>\n<p>Bunca yapt\u0131\u011f\u0131m\u0131z \u00f6rne\u011fin \u00fczerine \u015funu bilmenizi isterim ki;<\/p>\n<blockquote><p><strong><em>Bir s\u0131n\u0131f i\u00e7erisinde ayn\u0131 i\u015fleve sahip hem implicit hem de explicit metot bulunamaz&#8230;<\/em><\/strong><\/p><\/blockquote>\n<p>Bunun d\u0131\u015f\u0131nda implicit ve explicit metotlar struct yap\u0131lar\u0131 i\u00e7inde ge\u00e7erlidir.<\/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            MyStruct2 m1 = new MyStruct();\r\n            MyClass m2 = (MyClass)new MyStruct();\r\n            int i = (int)new MyStruct();\r\n            MyStruct m3 = (MyStruct)3;\r\n        }\r\n    }\r\n    struct MyStruct\r\n    {\r\n        public static implicit operator MyStruct2(MyStruct m)\r\n        {\r\n            return new MyStruct();\r\n        }\r\n        public static explicit operator MyClass(MyStruct m)\r\n        {\r\n            return new MyClass();\r\n        }\r\n        public static implicit operator int(MyStruct m)\r\n        {\r\n            return 0;\r\n        }\r\n        public static explicit operator MyStruct(int i)\r\n        {\r\n            return new MyStruct();\r\n        }\r\n    }\r\n    struct MyStruct2 { }\r\n    class MyClass { }\r\n<\/pre>\n<p>implicit operator ve explicit operator metotlar\u0131n\u0131 her ne kadar kendi olu\u015fturmu\u015f oldu\u011fumuz s\u0131n\u0131flar aras\u0131nda kullanabiliyor olsakta; asl\u0131nda mimarisel olarak gelen ya da dll yahut m\u00fcdahale edemedi\u011fimiz di\u011fer library dosyalar\u0131nda bar\u0131nd\u0131r\u0131lan s\u0131n\u0131flar\u0131n kendi yazm\u0131\u015f oldu\u011fumuz s\u0131n\u0131flar ile ili\u015fkisini ve implicit ya da explicit d\u00f6n\u00fc\u015f\u00fcmlerini ayarlayabilmemizi, bu antla\u015fmalar\u0131 sa\u011flayabilmemizi ger\u00e7ekle\u015ftiren metotlard\u0131r.<\/p>\n<p>Son olarak bu bahsetti\u011fim konu \u00fczerine Ado.NET&#8217;in g\u00f6zdesi mimariye dahili SqlConnection s\u0131n\u0131f\u0131 ile yap\u0131lan a\u015fa\u011f\u0131daki \u00f6rne\u011fi incelemenizi tavsiye ederim;<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class Baglanti\r\n    {\r\n        public string BaglantiCumlesi { get; set; }\r\n        public static implicit operator SqlConnection(Baglanti b)\r\n        {\r\n            return new SqlConnection(b.BaglantiCumlesi);\r\n        }\r\n\r\n        public static explicit operator Baglanti(SqlConnection s)\r\n        {\r\n            return new Baglanti { BaglantiCumlesi = s.ConnectionString };\r\n        }\r\n    }\r\n<\/pre>\n<p>Kullan\u0131m\u0131;<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nBaglanti baglanti = new Baglanti();\r\nbaglanti.BaglantiCumlesi = &quot;Server=...&quot;;\r\nSqlConnection con = baglanti;\r\n\r\nSqlConnection con2 = new SqlConnection(&quot;Server=...&quot;);\r\nBaglanti baglanti2 = (Baglanti)con2;\r\n<\/pre>\n<p>Sab\u0131rla okudu\u011funuz i\u00e7in te\u015fekk\u00fcr ederim.<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, C#&#8217;ta bilin\u00e7li ve bilin\u00e7siz olmak \u00fczere iki t\u00fcr veri d\u00f6n\u00fc\u015f\u00fcm\u00fc s\u00f6z konusudur. Bilin\u00e7siz olarak yap\u0131lan t\u00fcr d\u00f6n\u00fc\u015f\u00fcm\u00fc Implicit Conversion \u015feklinde tarif edilirken, bilin\u00e7li d\u00f6n\u00fc\u015f\u00fcme ise Explicit Conversion diye nitelendirilmektedir. Hatta biliyorsunuz ki, Implicit&#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":6025,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12],"tags":[1733,1732,1737,1738,1734,1256,1731,1736,1723,1735],"class_list":["post-6011","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-c-sharp-c","tag-explicit","tag-explicit-conversion","tag-explicit-keyword","tag-explicit-operator","tag-explicit-operatorunun-asiri-yuklenmesi","tag-implicit","tag-implicit-conversion","tag-implicit-keyword","tag-implicit-operator","tag-implicit-operatorunun-asiri-yuklenmesi"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/6011","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=6011"}],"version-history":[{"count":0,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/6011\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media\/6025"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=6011"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=6011"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=6011"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}