﻿
{"id":277,"date":"2012-03-21T00:38:05","date_gmt":"2012-03-21T00:38:05","guid":{"rendered":"http:\/\/www.gencayyildiz.com\/blog\/?p=277"},"modified":"2012-05-28T12:59:31","modified_gmt":"2012-05-28T12:59:31","slug":"cta-interfacearayuz","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/cta-interfacearayuz\/","title":{"rendered":"C# Interface(Aray\u00fcz)"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Bu yaz\u0131mda C#&#8217;ta interface yani aray\u00fczlerden bahsedece\u011fim.Bireysel \u00e7al\u0131\u015fmalar\u0131m\u0131zda pek kullanmayaca\u011f\u0131m\u0131z bu y\u00f6ntemin, tak\u0131m \u00e7al\u0131\u015fmalar\u0131nda \u00e7ok \u00f6nemli yeri vard\u0131r.\u00d6ncelikle \u015funu belirtmek isterimki Interface bir class de\u011fildir.Interface sadece yap\u0131 belirtir.Yani o interfaceden kal\u0131t\u0131m alan classlar\u0131n bar\u0131nd\u0131rmas\u0131 gereken metod,property vs. gibi elemanlar\u0131 belirtir.Bu konuyu ilk \u00f6\u011frenirken Abstract s\u0131n\u0131f\u0131yla Interface aras\u0131ndaki fark\u0131 merak edebilirsiniz.Interface bir binan\u0131n plan\u0131d\u0131r.Salon \u015furada olacak,mutfak burada vs..Abstract s\u0131n\u0131f\u0131 ise bir evin i\u00e7i tamamlanmam\u0131\u015f halidir.Mesela salon bitmi\u015f ama mutfak bitmemi\u015f.<br \/>\n<!--more--><br \/>\nBir zorunluluk olmamakla beraber interface isimlerinin ba\u015f\u0131na I konulmas\u0131 tavsiye edilir.\u00d6rn,IDunya.Bununla beraber bir yap\u0131n\u0131n interface oldu\u011fu kolayca anla\u015f\u0131labilir.<\/p>\n<p>Interfaceler, kendisinden kal\u0131t\u0131m alan s\u0131n\u0131flar\u0131n i\u00e7inde olmas\u0131 zorunlu olan yap\u0131lar\u0131 tan\u0131mlarlar.Tek g\u00f6revleri budur.Interfaceler bu y\u00f6nleriyle abstract classlara benzerler.Ancak abstract class i\u00e7erisinde,kendisinden kal\u0131t\u0131m alan s\u0131n\u0131fta yaz\u0131lmas\u0131 zorunlu olmayacak yap\u0131lar da tan\u0131mlanabilir.Fakat interface tan\u0131mlanan her\u015fey, kal\u0131t\u0131m\u0131 alan s\u0131n\u0131fta uygulanmak zorundad\u0131r.Yine abstract classlarda oldu\u011fu gibi burada tan\u0131mlanan yap\u0131lar\u0131n g\u00f6vdeleri yaz\u0131lmaz.G\u00f6vdeler, kal\u0131t\u0131m alan s\u0131n\u0131fta yaz\u0131l\u0131r.<\/p>\n<p>Bir class sadece tek bir classtan kal\u0131t\u0131m alabilirken, ayn\u0131 anda birden fazla interfaceden kal\u0131t\u0131m alabilir.<\/p>\n<p>Bir class ayn\u0131 anda her bir classtan hem de bir ya da birden fazla interfaceden kal\u0131t\u0131m alabilir.Ancak kal\u0131t\u0131m\u0131 yazarken ilk \u00f6nce classdan kal\u0131t\u0131m almal\u0131d\u0131r.Yani class : A_Classi,B_Interfacei,C_Interfacei \u015feklinde.<\/p>\n<p>Interfaceler i\u00e7inde metod,property ve indexer gibi yap\u0131lar tan\u0131mlanabilirken , constructor v.s gibi yap\u0131lar tan\u0131mlanamaz.<\/p>\n<p>Interfaceler i\u00e7inde static yap\u0131lar OLAMAZ.<\/p>\n<p>Interface i\u00e7indeki yap\u0131lar\u0131n public,private,protected v.s gibi eri\u015fim belirleyicileri olmaz.Bu yap\u0131lar t\u00fcreyen classlarda yaz\u0131l\u0131rken eri\u015fim belirleyicileri orada belirlenir.<\/p>\n<p>\u015eimdi buraya kadar Interfaceler hakk\u0131nda genel bilgilendirmede bulundum.Bir sonraki sayfada Interfaceleri C# \u00fczerinden inceleyelim.<br \/>\n<!--nextpage--><br \/>\n\u015eimdi bu sayfada C# \u00fczerinden interface yap\u0131s\u0131n\u0131n\u0131n nas\u0131l kuruldu\u011funu anlataca\u011f\u0131m.\u00d6ncelikle class yerine interface yazmam\u0131z gerekiyor.A\u015fa\u011f\u0131daki bir interface yap\u0131s\u0131d\u0131r.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    interface ISeriler\r\n    {\r\n    }\r\n<\/pre>\n<p>\u015eimdi bir senaryo yazal\u0131m.<br \/>\nBenim bir yaz\u0131l\u0131m \u015firketim olsun.Adlar\u0131 Ahmet ve Ay\u015fe olan iki \u00e7al\u0131\u015fan\u0131m olsun.\u015eimdi toplant\u0131da Ahmet ve Ay\u015fe&#8217;ye yapaca\u011f\u0131m\u0131z projeden bahsedece\u011fim.Elimde a\u015fa\u011f\u0131daki gibi bir interface im var.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    interface ISeriler\r\n    {\r\n        int SonrakiniGetir();\r\n        int S\u0131n\u0131fla();\r\n        int BaslangicDegeriniVer(int baslangic);\r\n\r\n        int Sonraki\r\n        {\r\n            get;\r\n\/*Bu s\u0131n\u0131ftan kal\u0131t\u0131m alan s\u0131n\u0131f bu propertyi mecbur kullanacakt\u0131r.Ve bu propertyde sadece get blo\u011fu mecbur olacakt\u0131r.\r\nset blo\u011funuda kafam\u0131za g\u00f6re yazal\u0131m dersek onu kabul etmeyecektir.Abstract s\u0131n\u0131f\u0131ndaki farklardan biri budur.*\/\r\n        }\r\n    }\r\n<\/pre>\n<p>Yukar\u0131da g\u00f6rd\u00fc\u011f\u00fcn\u00fcz interface yap\u0131s\u0131n\u0131 inceleyiniz.B\u00fct\u00fcn elemanlar\u0131n eri\u015fim belirleyicileri yaz\u0131lmam\u0131\u015ft\u0131r.Ve metodlar\u0131n ve propertydeki get setlerin g\u00f6vdeleri tan\u0131mlanmam\u0131\u015ft\u0131r.Bunlar\u0131n hepsi Interfacein kurallar\u0131d\u0131r.Bu s\u0131n\u0131ftan kal\u0131t\u0131m alacak olan s\u0131n\u0131fta hem eri\u015fim belirleyicileri tan\u0131mlanacak , hem de elemanlar\u0131n g\u00f6vdeleri yaz\u0131lacakt\u0131r.Neyse senaryoya devam edelim.<\/p>\n<p>Ahmet ve Ay\u015fe bu interfacei incelerken ,bir yandan beni dinlemektedirler.&#8221;Ahmet ve Ay\u015fe bu interfacei kullan\u0131p,ikiser ikiser ve \u00fc\u00e7er \u00fc\u00e7er sayma yapan programlar\u0131 yazman\u0131z\u0131 istiyorum.Ahmet sen ikiser ikiser sayacak olan program\u0131 , Ay\u015fe sende \u00fc\u00e7er \u00fc\u00e7er sayacak olan program\u0131 yaz.&#8221; diyorum.Art\u0131k Ahmet ve Ay\u015fe bu interface e ba\u011fl\u0131 olarak bu programlar\u0131 yazmak zorundad\u0131rlar.<\/p>\n<p>\u015eimdi Ahmet&#8217;in yazd\u0131\u011f\u0131 ikiser ikiser sayan class\u0131n\u0131 inceleyelim.Ard\u0131nda Ay\u015feye bakar\u0131z.<br \/>\nAhmet bu class\u0131 IkiserIkiser.cs sayfas\u0131nda tasarl\u0131yor.<\/p>\n<table border=\"0\">\n<tbody>\n<tr>\n<td>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class IkiserIkiser:ISeriler\r\n    {\r\n\r\n    }\r\n<\/pre>\n<\/td>\n<td>\u00a0<a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/03\/seriler1.jpg\"><img loading=\"lazy\" decoding=\"async\" title=\"seriler1\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/03\/seriler1.jpg\" alt=\"\" width=\"220\" height=\"74\" \/><\/a><\/td>\n<\/tr>\n<tr>\n<td>Yukar\u0131daki IkiserIkiser s\u0131n\u0131f\u0131 ISeriler interfaceinden kal\u0131t\u0131m al\u0131yor.\u015eimdi ISeriler interfaceindeki elemanlar\u0131 zorunlu bu s\u0131n\u0131fta kullanmam\u0131z gerekiyor.Bunun i\u00e7in manuel olarak interfacedeki elemanlar\u0131,bu s\u0131n\u0131fa yazm\u0131yoruz.Sa\u011f \u00fcst k\u00f6\u015fedeki foto\u011frafa bakarsan\u0131z,ISeriler yaz\u0131s\u0131n\u0131n alt\u0131nda mavi bir imlec \u00e7\u0131k\u0131yor.<\/td>\n<td>\u00a0Yukar\u0131da g\u00f6rd\u00fc\u011f\u00fcn\u00fcz mavi imlece t\u0131klarsan\u0131z iki se\u00e7enek g\u00f6r\u00fcrs\u00fcn\u00fcz.<\/td>\n<\/tr>\n<tr>\n<td colspan=\"2\">\u00a0\u00a0<a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/03\/Seriler2.jpg\"><img loading=\"lazy\" decoding=\"async\" title=\"Seriler2\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/03\/Seriler2.jpg\" alt=\"\" width=\"427\" height=\"103\" \/><\/a>Bu se\u00e7enekler<strong> implement interface &#8216;ISeriler&#8217; ve Explicitly implement interface &#8216;ISeriler&#8217;<\/strong>.Yani ISeriler interfaceindeki elemanlar\u0131 iki yolla implement edebiliyorum.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Ben \u015fimdilik <strong>implement interface &#8216;ISeriler&#8217;<\/strong> se\u00e7ene\u011fini kullanarak implement etmeyi g\u00f6sterece\u011fim.Bu se\u00e7ene\u011fi se\u00e7ti\u011finiz zaman ISeriler interfaceindeki elemanlar a\u015fa\u011f\u0131daki gibi gelecektir.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class IkiserIkiser:ISeriler\r\n    {\r\n        public int SonrakiniGetir()\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n        public int S\u0131n\u0131fla()\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n        public int BaslangicDegeriniVer(int baslangic)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n        public int Sonraki\r\n        {\r\n            get { throw new NotImplementedException(); }\r\n        }\r\n    }\r\n<\/pre>\n<p>Yukar\u0131da g\u00f6rd\u00fc\u011f\u00fcn\u00fcz \u015fekilde gelen elemanlar\u0131 , Ahmet istedi\u011fi \u015fekilde programl\u0131yor.(i\u00e7indeki throw lu ifadeleri silip kendi yaz\u0131yor)<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class IkiserIkiser:ISeriler\r\n    {\r\n        int baslangic;\r\n        int deger;\r\n\/\/G\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi kal\u0131t\u0131m alan s\u0131n\u0131fta , interfacede olmayan elemanlar yaz\u0131labiliyor.\r\n        public int SonrakiniGetir()\r\n        {\r\n            deger = deger + 2;\r\n            return deger;\r\n        }\r\n        public int S\u0131n\u0131fla()\r\n        {\r\n            baslangic = 0;\r\n            deger = baslangic;\r\n            return deger;\r\n        }\r\n        public int BaslangicDegeriniVer(int baslangic)\r\n        {\r\n            this.baslangic = baslangic;\r\n            deger = baslangic;\r\n            return deger;\r\n        }\r\n        public int Sonraki\r\n        {\r\n            get\r\n            {\r\n                return SonrakiniGetir();\r\n            }\r\n        }\r\n    }\r\n<\/pre>\n<p>Art\u0131k Ahmet interfacee uygun halde class\u0131n\u0131 kodlam\u0131\u015ft\u0131r.\u015eimdi Ay\u015fe&#8217;nin yapt\u0131\u011f\u0131 i\u015fe bakal\u0131m.<br \/>\nAy\u015fe ise interfacedeki elemanlar\u0131 UcerUcer.cs class\u0131nda tasarl\u0131yor.<br \/>\n<strong>implement interface &#8216;ISeriler&#8217;<\/strong> ile ISeriler intefaceinden elemanlar\u0131 implement ediyor.Ve a\u015fa\u011f\u0131daki class\u0131 programl\u0131yor.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class UcerUcer:ISeriler\r\n    {\r\n        int baslangic;\r\n        int deger;\r\n        public int SonrakiniGetir()\r\n        {\r\n            deger = deger + 3;\r\n            return deger;\r\n        }\r\n\r\n        public int S\u0131n\u0131fla()\r\n        {\r\n            baslangic = 0;\r\n            deger = baslangic;\r\n            return deger;\r\n        }\r\n\r\n        public int BaslangicDegeriniVer(int baslangic)\r\n        {\r\n            this.baslangic = baslangic;\r\n            deger = baslangic;\r\n            return deger;\r\n        }\r\n\r\n        public int Sonraki\r\n        {\r\n            get\r\n            {\r\n                return SonrakiniGetir();\r\n            }\r\n        }\r\n    }\r\n<\/pre>\n<p>Ahmet ve Ay\u015fe interface e uygun classlar\u0131n\u0131 tasarlad\u0131lar ve \u00f6n\u00fcme koydular.\u015eimdi \u015funlara dikkat etmenizi istiyorum.\u0130kiside ayn\u0131 interfacei kulland\u0131klar\u0131 i\u00e7in ikisinin class\u0131nda da metodlar,propertyler vs. gibi elemanlar\u0131n isimleri ayn\u0131 oldu.Yani Ahmet&#8217;in yazd\u0131\u011f\u0131 IkiserIkiser.cs class\u0131nda int baslangic parametresi alan BaslangicDegeriniVer() metodu varken, Ay\u015fe&#8217;nin yazd\u0131\u011f\u0131 UcerUcer.cs class\u0131nda da int baslangic parametresi alan ve BaslangicDegeriniVer() metodu var.<\/p>\n<p>\u015eimdi bir m\u00fc\u015fteri gelip benden iki\u015fer iki\u015fer sayan bir program istedi.Ben hemen IkiserIkiser.cs s\u0131n\u0131f\u0131n\u0131 kullarak bir program haz\u0131rl\u0131yorum.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n            IkiserIkiser nesne = new IkiserIkiser();\r\n            nesne.BaslangicDegeriniVer(2);\r\n            for (int i = 0; i &lt; 5; i++)\r\n            {\r\n                MessageBox.Show(nesne.SonrakiniGetir().ToString());\r\n            }\r\n<\/pre>\n<p>Ve ayn\u0131 m\u00fc\u015fteri gelip, iki\u015fer iki\u015fer sayan programdan vaz ge\u00e7ti\u011fini, \u00fc\u00e7er \u00fc\u00e7er sayan program istedi\u011fini s\u00f6yledi.Bende yeni bir program yazana kadar yukar\u0131daki kodlar\u0131n sadece s\u0131n\u0131f ad\u0131n\u0131 de\u011fi\u015ftiriyorum.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n            UcerUcer nesne = new UcerUcer();\r\n            nesne.BaslangicDegeriniVer(2);\r\n            for (int i = 0; i &lt; 5; i++)\r\n            {\r\n                MessageBox.Show(nesne.SonrakiniGetir().ToString());\r\n            }\r\n<\/pre>\n<p>Interfacein bize sa\u011flad\u0131\u011f\u0131 esnekli\u011fin fark\u0131na varm\u0131\u015fs\u0131n\u0131zd\u0131r umar\u0131m.<br \/>\nBuraya kadar ki k\u0131s\u0131m interfacee giri\u015f niteli\u011fi ta\u015f\u0131maktad\u0131r.Bir sonraki sayfada olas\u0131 bir ka\u00e7 durumdan bahsedece\u011fim.<br \/>\n<!--nextpage--><br \/>\n\u015eimdi 3 tane interface olu\u015ftural\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    interface IA\r\n    {\r\n        void Metod1();\r\n        void Metod2();\r\n    }\r\n<\/pre>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    interface IB\r\n    {\r\n        void Metod3();\r\n        void Metod4();\r\n    }\r\n<\/pre>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    interface IC\r\n    {\r\n        void Metod4();\r\n        void Metod5();\r\n    }\r\n<\/pre>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    interface ID:IC\r\n    {\r\n        void Metod6();\r\n        void Metod7();\r\n    }\r\n<\/pre>\n<p>\u015eimdi yukar\u0131daki IB ce IC interfacelerini inceleyiniz.Dikkat ederseniz ikisinde de ayn\u0131 isimde Metod4() vard\u0131r.Ve ID interfacei IC interfaceinden kal\u0131t\u0131m almaktad\u0131r.Bir interface, ba\u015fka bir ya da daha fazla interfaceden kal\u0131t\u0131m alabilir.Bu durumda bu interface , kal\u0131t\u0131m ald\u0131\u011f\u0131 interface i\u00e7indeki elemanlar\u0131 uygulamak zorunda de\u011fildir.Fakat, ID interfaceinden kal\u0131t\u0131m alan bir s\u0131n\u0131f bu durumda hem IC den hem de ID den elemanlar\u0131n\u0131 mecbur uygulamak zorundad\u0131r.Interfaceleri birbirinden t\u00fcreterek program\u0131m\u0131zda geni\u015fletme i\u015flemini kolayca sa\u011flayabiliriz.<\/p>\n<p>\u015eimdi \u015funa dikkat edelim.IB cs IC interfaceleri i\u00e7inde Metod4() imzas\u0131na sahip metodlar vard\u0131r.Yani ikisinde de ayn\u0131 isimde metod vard\u0131r.IB ve IC den ayn\u0131 anda kal\u0131t\u0131m alan s\u0131n\u0131flar i\u00e7inde Metod4() oldu\u011fu kesindir.Ama bunun hangi interface taraf\u0131ndan uygulatt\u0131r\u0131ld\u0131\u011f\u0131 kesin de\u011fildir.\u0130\u015fte bu gibi yap\u0131lara(ayn\u0131 isimde, de\u011fi\u015fik interfacelerde tan\u0131mlanan yap\u0131lara) <strong>name hiding (isim saklama)<\/strong> ya u\u011fram\u0131\u015f yap\u0131lar diyoruz.<br \/>\n\u015eimdi bir AClassi.cs isminde class olu\u015ftural\u0131m ve IB ve IC interfacelerinden kal\u0131t\u0131m almas\u0131n\u0131 sa\u011flayal\u0131m.Sonrada kal\u0131t\u0131m ald\u0131\u011f\u0131 s\u0131n\u0131flardan elemanlar\u0131 implement yapal\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class AClassi:IC,IB\r\n    {\r\n        public void Metod4()\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n        public void Metod5()\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n        public void Metod3()\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n    }\r\n<\/pre>\n<p>Yukar\u0131da g\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi \u00f6ncelikle IC den implement yap\u0131yorum, Metod4() ve Metod5() geliyor.Sonra IB den implement yap\u0131yorum Metod4() var oldu\u011fu i\u00e7in sadece Metod3() geliyor.\u015eimdi ben bu Metod4() \u00fcn IC interfaceinemi yoksa IB interfaceinemi ait oldu\u011funu nas\u0131l anlayaca\u011f\u0131m.(name hiding)Tabikide anlayamayaca\u011f\u0131m.Bu sorunu \u00e7\u00f6zmek i\u00e7in \u015fu yolu izliyoruz.<\/p>\n<p>Interface \u00fczerine gelince mavi imle\u00e7ten bu sefer <strong>Explicitly implement interface &#8216;ISeriler&#8217;<\/strong> se\u00e7ene\u011fini se\u00e7iyoruz.IB ve IC i\u00e7in Explicitly implement yap\u0131yoruz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class AClassi:IC,IB\r\n    {\r\n        void IC.Metod4()\r\n        {\r\n        }\r\n        void IC.Metod5()\r\n        {\r\n        }\r\n        void IB.Metod3()\r\n        {\r\n        }\r\n        void IB.Metod4()\r\n        {\r\n        }\r\n    }\r\n<\/pre>\n<p>G\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi IB ve IC interfalerini bu classa explictly olarak implement ettim.E\u011fer bir interface explicitly implement edilirse, i\u00e7indeki yap\u0131lar private olarak al\u0131n\u0131r.Ve g\u00f6r\u00fcld\u00fc\u011f\u00fc gibi hangi interfaceden geldikleri de bellidir.B\u00f6ylece name hiding a\u015f\u0131lm\u0131\u015f olur.<\/p>\n<p>Fakat explicit implementten dolay\u0131 elemanlar private gelecek ve bu class nesneleri \u00fczerinden eri\u015felemeyecek.E\u011fer tutup ba\u015flar\u0131na manuel olarak public yazmaya kalkarsak da hata veriyor.Yani manuel olarak elle hi\u00e7 bir m\u00fcdahale edemiyoruz.\u0130\u015fler iyice \u00e7\u0131\u011f\u0131r\u0131ndan \u00e7\u0131k\u0131yor gibi ama sak\u0131n tela\u015flanmay\u0131n.<\/p>\n<p>Bu durumda \u015fu i\u015flemi yapaca\u011f\u0131z.<\/p>\n<table border=\"0\">\n<tbody>\n<tr>\n<td><a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/03\/Aclassi1.jpg\"><img loading=\"lazy\" decoding=\"async\" title=\"Aclassi1\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/03\/Aclassi1.jpg\" alt=\"\" width=\"408\" height=\"125\" \/><\/a><\/td>\n<td>\u00a0Yanda g\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi AClassindan bir nesne olu\u015fturuyoruz ve bunu IC interface ineden olu\u015fturulan nesneye(nesnem) ge\u00e7iriyoruz.nesnem. dedi\u011fimiz zaman Metod4() ve Metod5 i g\u00f6r\u00fcyoruz.Dikkat ederseniz Metod4 \u00fcn IC interfaceinden geldi\u011fini g\u00f6rece\u011fiz.Ayn\u0131 \u015fekilde a\u015fa\u011f\u0131daki sat\u0131r\u0131da inceleyiniz.<\/td>\n<\/tr>\n<tr>\n<td>\u00a0<a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/03\/AClassi2.jpg\"><img loading=\"lazy\" decoding=\"async\" title=\"AClassi2\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/03\/AClassi2.jpg\" alt=\"\" width=\"316\" height=\"182\" \/><\/a><\/td>\n<td>\u00a0Yanda g\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi , yukar\u0131da yapt\u0131\u011f\u0131m\u0131z\u0131n ayn\u0131s\u0131n\u0131 IB interfacei i\u00e7inde yap\u0131yoruz.Ve Metod4() \u00fcn IB interfaceinden geldi\u011fini g\u00f6r\u00fcyoruz.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Yukar\u0131daki duruma dikkat edersek e\u011fer, AClassi i\u00e7inde tan\u0131ml\u0131 olan metodlar \u00e7ok bi\u00e7imlili\u011fi kulland\u0131\u011f\u0131m\u0131z halde g\u00f6z\u00fckmektedirler.Bunun sebebini sormay\u0131n \ud83d\ude42 Interface de bu \u015fekilde bir kullan\u0131m vard\u0131r.<\/p>\n<p>\u015eimdi di\u011fer sayfada ba\u015fka bir y\u00f6ntem daha g\u00f6sterip Interface mevzusunu kapataca\u011f\u0131m.Benimde ba\u015f\u0131m \u00e7atlad\u0131 \ud83d\ude42<br \/>\n<!--nextpage--><br \/>\n\u015eimdi iki interfaceim olsun ve i\u00e7inde ayn\u0131 isimden metodumuz olsun.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    interface IA\r\n    {\r\n        int Metot(int x);\r\n    }\r\n<\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    interface IB\r\n    {\r\n        int Metot(int x);\r\n    }\r\n<\/pre>\n<p>\u015eimdide bunlardan kal\u0131t\u0131m alacak bir s\u0131n\u0131f olu\u015fturay\u0131m.Bunlar\u0131 mecburen Explicitly implement edece\u011fim.(name hiding olmamas\u0131 i\u00e7in)<br \/>\nDeneme.cs s\u0131n\u0131f\u0131nda olu\u015fturuyorum.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n   class Deneme:IA,IB\r\n    {\r\n       int IA.Metot(int x)\r\n        {\r\n            return x + x;\r\n        }\r\n\r\n        int IB.Metot(int x)\r\n        {\r\n            return x * x;\r\n        }\r\n    }\r\n<\/pre>\n<p>Yukar\u0131daki metodlar\u0131 name hiding olmamas\u0131 i\u00e7in mecburen Explicitly implement ettik.B\u00f6ylece gelen elemanlar private oldu ve budurumda bu metodlar\u0131 bu class nesnesi \u00fczerinde nas\u0131l kulland\u0131raca\u011f\u0131z bunu g\u00f6stereyim.<br \/>\nDeneme.cs s\u0131n\u0131f\u0131na public olan iki tane metod yaz\u0131yorum.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n       public int MetotA(int a)\r\n        {\r\n            IA a_ref = this;\r\n            return a_ref.Metot(a);\r\n        }\r\n\r\n        public int MetotB(int a)\r\n        {\r\n            IB b_ref = this;\r\n            return b_ref.Metot(a);\r\n        }\r\n<\/pre>\n<p>Yukar\u0131daki yap\u0131y\u0131 incelerseniz e\u011fer, bu classtan d\u0131sar\u0131ya ac\u0131lan iki metod sayesinde , private metodlar\u0131 kullanabiliyorum.<\/p>\n<p>Umar\u0131m anlatt\u0131\u011f\u0131m interface yap\u0131s\u0131ndan yararlan\u0131rs\u0131n\u0131z.Benden bu kadar ..<br \/>\nBir sonraki yaz\u0131mda g\u00f6r\u00fc\u015fmek \u00fczere..<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>Bu yaz\u0131mda C#&#8217;ta interface yani aray\u00fczlerden bahsedece\u011fim.Bireysel \u00e7al\u0131\u015fmalar\u0131m\u0131zda pek kullanmayaca\u011f\u0131m\u0131z bu y\u00f6ntemin, tak\u0131m \u00e7al\u0131\u015fmalar\u0131nda \u00e7ok \u00f6nemli yeri vard\u0131r.\u00d6ncelikle \u015funu belirtmek isterimki Interface bir class de\u011fildir.Interface sadece yap\u0131 belirtir.Yani o interfaceden kal\u0131t\u0131m alan classlar\u0131n bar\u0131nd\u0131rmas\u0131&#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],"tags":[167,168],"class_list":["post-277","post","type-post","status-publish","format-standard","hentry","category-c-sharp-c","tag-arayuz","tag-interface"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/277","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=277"}],"version-history":[{"count":0,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/277\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=277"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=277"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=277"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}