﻿
{"id":246,"date":"2012-03-19T22:13:59","date_gmt":"2012-03-19T22:13:59","guid":{"rendered":"http:\/\/www.gencayyildiz.com\/blog\/?p=246"},"modified":"2014-07-28T02:23:52","modified_gmt":"2014-07-28T02:23:52","slug":"cta-inheritancekalitimmiras","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/cta-inheritancekalitimmiras\/","title":{"rendered":"C# Inheritance(Kal\u0131t\u0131m,Miras)"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Bu yaz\u0131m da C#&#8217;ta inheritance(Kal\u0131t\u0131m,Miras) kavram\u0131ndan bahsedece\u011fim.Inheritance,OOP(Object Oriented Programming &#8211; Nesne Y\u00f6nelimli Programlama) tekniklerinden birisidir.S\u0131n\u0131flar aras\u0131 hiyerar\u015fik yap\u0131 kurabilmek, olu\u015fturmak i\u00e7in kullan\u0131l\u0131r.Bir s\u0131n\u0131f,ba\u015fka bir s\u0131n\u0131ftan t\u00fcreyerek(kal\u0131t\u0131m alma) , o s\u0131n\u0131f\u0131n public ve protected tan\u0131ml\u0131 yap\u0131lar\u0131n\u0131 devral\u0131r.Kal\u0131t\u0131m alan s\u0131n\u0131fa : Derived Class , kal\u0131t\u0131m veren s\u0131n\u0131fa : Base class denir.T\u00fcreyen s\u0131n\u0131f,t\u00fcreten s\u0131n\u0131f olarak isimlendirilir.<br \/>\n<!--more--> <strong>ACCESS MODIFIERS (ER\u0130\u015e\u0130M BEL\u0130RLEY\u0130C\u0130LER\u0130)<\/strong><br \/>\n<strong><span style=\"color: #ff0000;\">Protected<\/span><\/strong><br \/>\nE\u011fer bir class i\u00e7erisinde bir eleman,bir metod protected olarak tan\u0131mlanm\u0131\u015fsa, o yap\u0131 o class i\u00e7in private ve o classtan t\u00fcreyen classlar i\u00e7in public davran\u0131\u015f sergiler.Yani protected elemanlar sadece o class ve o classtan t\u00fcreyen classlar da kullan\u0131labilirler.O classtan t\u00fcremeyenler de kullan\u0131lmazlar.<br \/>\n<strong><span style=\"color: #ff0000;\">Internal<\/span><\/strong><br \/>\nE\u011fer bir class i\u00e7indeki ifade internal ile i\u015faretlenmi\u015fse sadece o assembly(o solution, o exe) i\u00e7inde kullan\u0131labilirler(Kal\u0131t\u0131m als\u0131n ya da almas\u0131n).Di\u011fer yerlerde kullan\u0131lmaz.Mesela bir .dll projesi i\u00e7indeki bir classta internal i\u015faretli yap\u0131lar, o .dll in eklenip kullan\u0131ld\u0131\u011f\u0131 ba\u015fka solutionlar i\u00e7indeki yap\u0131larda kullan\u0131lamazlar.<br \/>\n<strong><span style=\"color: #ff0000;\">Protected Internal<\/span><\/strong><br \/>\nBa\u015fka bir assembly i\u00e7inde, e\u011fer bir class, bu assemblydeki bir classtan t\u00fcremi\u015fse,o class i\u00e7indeki protected internal ifadeler protected olmalar\u0131ndan dolay\u0131 kullan\u0131labilirler, ama t\u00fcremeyen classlar i\u00e7inde bu elemanlar ayn\u0131 zamanda internal olduklar\u0131 i\u00e7in kullan\u0131lamazlar.<br \/>\n<span style=\"color: #ff0000;\"><strong>Public ve Private<\/strong><\/span><br \/>\nBu eri\u015fim belirliyicilerini zaten biliyoruz.Birdaha de\u011finmek gerekirse;<br \/>\nPublic eri\u015fim belirleyicisi ile olu\u015fturulan metod ya da property ler olu\u015fturuldu\u011fu class d\u0131s\u0131ndan da eri\u015filebilir.<br \/>\nPrivate eri\u015fim belirleyici ile olu\u015fturulan metod ya da property ler olu\u015fturuldu\u011fu class d\u0131\u015f\u0131nda ba\u015fka bir class ta kullan\u0131lamazlar.<\/p>\n<hr \/>\n<p>C# da olu\u015fturulan her class asl\u0131nda Object class\u0131ndan t\u00fcremi\u015ftir.Yani her class object class\u0131ndan otomatik t\u00fcretilir.Bir s\u0131n\u0131f yaz\u0131p,olu\u015fturdu\u011fumuz s\u0131n\u0131ftan nesne yarat\u0131rsak e\u011fer,o nesnenin i\u00e7inde otomatikman Equals(),GetHashCode(),GetType() ve ToString() metodlar\u0131n\u0131 g\u00f6r\u00fcr\u00fcz.Halbuki biz bu metodlar\u0131 s\u0131n\u0131f\u0131m\u0131za yazmam\u0131\u015ft\u0131k.Bu metodlar Object s\u0131n\u0131f\u0131ndan kal\u0131t\u0131m yoluyla gelirler.Her nesneden ula\u015f\u0131labilen bu metodlar asl\u0131nda object s\u0131n\u0131f\u0131n\u0131n metodlar\u0131d\u0131r.<\/p>\n<p>Bir s\u0131n\u0131f sadece tek bir s\u0131n\u0131ftan kal\u0131t\u0131m alabilir.Ayn\u0131 anda birden fazla s\u0131n\u0131ftan kal\u0131t\u0131m alamaz.Fakat ileride g\u00f6rece\u011fimiz interface yap\u0131lar\u0131 kullan\u0131larak bu s\u0131k\u0131nt\u0131 a\u015f\u0131lacakt\u0131r.<\/p>\n<p>T\u00fcreten s\u0131n\u0131f(base class) , t\u00fcreyen s\u0131n\u0131f(derived class) i\u00e7in base olarak kabul edilir.Yani her s\u0131n\u0131f\u0131n base si,kendi t\u00fcredi\u011fi s\u0131n\u0131ft\u0131r.Hiyerar\u015finin en tepesindeki s\u0131n\u0131f her s\u0131n\u0131f\u0131n base i de\u011fildir.Yani;<br \/>\nA-&gt;B B-&gt;C(A dan B t\u00fcresin,B den de C t\u00fcresin).Burada C nin basesi B s\u0131n\u0131f\u0131d\u0131r.A s\u0131n\u0131f\u0131 C nin basesi de\u011fildir.Her s\u0131n\u0131f\u0131n basesi t\u00fcredi\u011fi s\u0131n\u0131f\u0131d\u0131r.<br \/>\n\u015eimdi bu sayfada kal\u0131t\u0131mla ilgili teorik olarak bilgiler verdim.\u0130kinci sayfada mant\u0131\u011f\u0131yla ilgili konu\u015fal\u0131m.<br \/>\n<!--nextpage--><br \/>\nKal\u0131t\u0131m mant\u0131\u011f\u0131n\u0131 ben Aristotales felsefesine benzetiyorum \ud83d\ude42<br \/>\n\u015eimdi \u0130nsan,K\u0131zlar ve Erkekleri d\u00fc\u015f\u00fcnelim.Burda hangisi Base Class,hangisi Derived Class olacakt\u0131r.<br \/>\n\u015eimdi d\u00fc\u015f\u00fcnelim,<br \/>\nErkekler ve K\u0131zlar gruplar\u0131n\u0131n ikiside sonu\u00e7ta insan oldu\u011fu i\u00e7in, ikisinin de ortak \u00f6zellikleri mevcuttur.Yani bir Erke\u011fin de K\u0131z\u0131n da ad\u0131,soyad\u0131,ya\u015f\u0131 vs. gibi \u00f6zellikler ortakt\u0131r.Ancak Erkeklerin ve K\u0131zlar\u0131n kendine has,bir di\u011fer grupta bulunmayan \u00f6zellikleri vard\u0131r.Bunlar Erkekler de sakal,b\u0131y\u0131k vs. olurken, K\u0131zlar da makyaj yapmak,adam\u0131 hasta etmek gibi kendilerine has \u00f6zellikleri vard\u0131r.Durum b\u00f6yleyken ikisinde de ortak olan \u00f6zellikler insan s\u0131n\u0131f\u0131nda bulunmas\u0131 gerekirken,kendilerine has \u00f6zellikler kendi s\u0131n\u0131flar\u0131nda bulunmal\u0131d\u0131r.Yani burda Base Class \u0130nsan s\u0131n\u0131f\u0131 olurken,Derived Class Erkek ve K\u0131zlar olacakt\u0131r.Erkekler ve K\u0131zlar ad,soyad vs. gibi insan i\u00e7in ortak olan \u00f6zellikleri insan s\u0131n\u0131f\u0131ndan kal\u0131t\u0131mla alacaklard\u0131r.(Kendi s\u0131n\u0131flar\u0131na da bu \u00f6zellikleri tan\u0131mlayabiliriz ama kal\u0131t\u0131m\u0131n amac\u0131 bu hiyerar\u015fiyi kurmakt\u0131r.)Ve kendine has \u00f6zelliklerini kendi s\u0131n\u0131flar\u0131ndan alacaklard\u0131r.Bu mant\u0131kta hiyerar\u015fiyi uzatabiliriz.<br \/>\nUmar\u0131m kal\u0131t\u0131m\u0131n mant\u0131\u011f\u0131n\u0131 anlatabilmi\u015fimdir.<br \/>\nBir sonraki sayfa da C#&#8217;ta pratik olarak kal\u0131t\u0131m konusuna girece\u011fiz.Art\u0131k zaman\u0131 geldi&#8230;<br \/>\n<!--nextpage--><br \/>\n\u015eimdi bir \u015firketin hiyerar\u015fisini olu\u015ftural\u0131m.<br \/>\n\u015eirketin personellerini,sat\u0131\u015f dan\u0131\u015fmanlar\u0131n\u0131 ve \u015firketin i\u015f yapt\u0131\u011f\u0131 m\u00fc\u015fterileri kal\u0131t\u0131m yoluyla hiyerar\u015fik bir \u015fekilde yazal\u0131m.<br \/>\n\u015eimdi d\u00fc\u015f\u00fcnelim,personellerin,m\u00fc\u015fterilerin ve sat\u0131\u015f dan\u0131\u015fmanlar\u0131n\u0131n ortak \u00f6zellikleri nelerdir.Hepsi bir insan oldu\u011fu i\u00e7in ad\u0131,soyad\u0131,yasi vs.. gibi \u00f6zellikleri ortak.O halde bunlar\u0131 kal\u0131t\u0131mla alacaklar\u0131 bir s\u0131n\u0131f olu\u015ftural\u0131m.Ben bu s\u0131n\u0131fa \u0130nsan.cs ismini veriyorum.\u015eimdi bu s\u0131n\u0131f\u0131 olu\u015ftural\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n---\u0130nsan.cs---\r\n    class Insan\r\n    {\r\n        public string Adi { get; set; }\r\n        public string SoyAdi { get; set; }\r\n        public string Yasi { get; set; }\r\n        public string Cinsiyet { get; set; }\r\n    }\r\n<\/pre>\n<p>Yukar\u0131da akl\u0131ma geldi\u011fi kadar ortak \u00f6zellikleri yazd\u0131m.\u015eimdi personelin s\u0131n\u0131f\u0131n\u0131 olu\u015ftural\u0131m.Personeller.cs isimli class dosyas\u0131n da haz\u0131rl\u0131yorum.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n---Personeller.cs---\r\n    class Personeller:Insan\r\n    {\r\n        public string PersonelMaasi { get; set; }\r\n        public string PersonelUnvani { get; set; }\r\n        public string PersonelCalismaSuresi { get; set; }\r\n    }\r\n<\/pre>\n<p>\u015eimdi Personeller.cs s\u0131n\u0131f\u0131n da yazd\u0131klar\u0131m\u0131z personellere has \u00f6zelliklerdir.Yani her insan\u0131n maa\u015f\u0131,\u00fcnvan\u0131 ve calisma s\u00fcresi olmaz.Bu y\u00fczden dolay\u0131 bu \u00f6zellikler Personeller.cs s\u0131n\u0131f\u0131n da yaz\u0131lm\u0131\u015ft\u0131r.Insan.cs s\u0131n\u0131f\u0131ndan di\u011fer \u00f6zellikleri kal\u0131t\u0131m yoluyla alaca\u011f\u0131z.Bunuda s\u0131n\u0131f isminin yan\u0131nda &#8220;:&#8221; operat\u00f6r\u00fc ile Base class\u0131m\u0131z\u0131n ismini yazarak ger\u00e7ekle\u015ftiriyoruz.&#8221;class Personeller:Insan&#8221;, bu ifade sayesinde Insan.cs s\u0131n\u0131f\u0131ndaki \u00f6zellikleri Personeller.cs s\u0131n\u0131f\u0131na kal\u0131t\u0131mla alm\u0131\u015f olduk.<br \/>\n\u015eimdi ise sat\u0131\u015f dan\u0131\u015fmanlar\u0131n\u0131n s\u0131n\u0131f\u0131n\u0131 haz\u0131rlayal\u0131m.SatisDanismani.cs s\u0131n\u0131f\u0131nda haz\u0131rl\u0131yorum.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n---SatisDanismani.cs---\r\n    class SatisDanismani:Personeller\r\n    {\r\n        public string SatisSayisi { get; set; }\r\n    }\r\n<\/pre>\n<p>\u015eimdi dikkat ederseniz,SatisDanismani.cs s\u0131n\u0131f\u0131n\u0131n Base Class\u0131 Personeller.cs s\u0131n\u0131f\u0131d\u0131r.Bunun sebebi,sat\u0131\u015f dan\u0131\u015fmanlar\u0131 \u015firketimizin zaten bir personelidir.Ve personellerin has \u00f6zellikleri sat\u0131\u015f dan\u0131\u015fman\u0131nda da olmas\u0131 gerekiyor.Bunuda Personeller.cs den kal\u0131t\u0131mla al\u0131yor.\u015eimdi soracaks\u0131n\u0131z.Peki sat\u0131\u015f dan\u0131\u015fman\u0131n\u0131n ad\u0131,soyad\u0131 vs.. gibi bilgileri yok mu? diye.Evet var.Personeller.cs s\u0131n\u0131f\u0131 kal\u0131t\u0131m yoluyla Insan.cs s\u0131n\u0131f\u0131ndan o \u00f6zellikleri ald\u0131\u011f\u0131 i\u00e7in,otomatikman SatisDanismani.cs s\u0131n\u0131f\u0131na da yans\u0131yacaklard\u0131r.Hiyerar\u015fiyi bu \u015fekilde rahat\u00e7a d\u00fczenleyebiliyoruz.Tabi her personellin yapt\u0131\u011f\u0131 i\u015f sat\u0131\u015f dan\u0131\u015fmanl\u0131\u011f\u0131 olmad\u0131\u011f\u0131 i\u00e7in, her personelin sat\u0131\u015f say\u0131s\u0131 olmayacakt\u0131r.O y\u00fczden kendine has \u00f6zelli\u011fini SatisDanismani.cs s\u0131n\u0131f\u0131nda yazd\u0131m.Di\u011fer geri kalan \u00f6zellikleri kal\u0131t\u0131m yoluyla alm\u0131\u015f olacak zaten.<br \/>\n\u015eimdi de m\u00fc\u015fteriler s\u0131n\u0131f\u0131n\u0131 olu\u015ftural\u0131m.M\u00fc\u015fteriler bizim \u015firketimizin personeli olmad\u0131\u011f\u0131na dikkatinizi \u00e7ekerim.Bu s\u0131n\u0131f\u0131 Musteriler.cs s\u0131n\u0131f\u0131nda olu\u015fturuyorum.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n---Musteriler.cs---\r\n    class Musteriler:Insan\r\n    {\r\n        public string MusteriSirketi { get; set; }\r\n    }\r\n<\/pre>\n<p>M\u00fc\u015fteri de bir insan oldu\u011fundan ola\u011fan \u00f6zellikleri Insan.cs s\u0131n\u0131f\u0131ndan al\u0131yor.Kendine has \u00f6zelli\u011fi olan \u015firketini kendi s\u0131n\u0131f\u0131na yaz\u0131yoruz.B\u00fct\u00fcn insanlar\u0131n \u015firketi yoktur.<\/p>\n<hr \/>\n<p>\u015eimdi bu classlar\u0131n kullan\u0131m\u0131n\u0131 g\u00f6relim.<\/p>\n<table border=\"0\">\n<tbody>\n<tr>\n<td><a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/03\/insan-300x191.jpg\"><img loading=\"lazy\" decoding=\"async\" title=\"\u0130nsan\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/03\/insan-300x191.jpg\" alt=\"\" width=\"300\" height=\"191\" \/><\/a><\/td>\n<td>Solda g\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi Insan.cs s\u0131n\u0131f\u0131ndan bir nesne olu\u015fturdu\u011fumuz zaman , o s\u0131n\u0131ftaki olu\u015fturulan metodlar\u0131 ve \u00f6zellikleri g\u00f6r\u00fcyoruz.<\/td>\n<\/tr>\n<tr>\n<td><a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/03\/personel-300x203.jpg\"><img loading=\"lazy\" decoding=\"async\" title=\"Personel\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/03\/personel-300x203.jpg\" alt=\"\" width=\"300\" height=\"203\" \/><\/a><\/td>\n<td>Solda g\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi Personeller.cs s\u0131n\u0131f\u0131ndan nesne \u00fcretti\u011fimiz zaman , o s\u0131n\u0131ftaki \u00f6zelliklerden ziyade kal\u0131t\u0131m ald\u0131\u011f\u0131 Base Class\u0131ndaki(Insan.cs) s\u0131n\u0131f\u0131n\u0131n \u00f6zellikleri de g\u00f6r\u00fclmektedir.<\/td>\n<\/tr>\n<tr>\n<td>\n<pre><a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/03\/satisdanismani-300x153.jpg\"><img loading=\"lazy\" decoding=\"async\" title=\"satisdanismani-300x153\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/03\/satisdanismani-300x153.jpg\" alt=\"\" width=\"300\" height=\"153\" \/><\/a><\/pre>\n<\/td>\n<td>Solda g\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi SatisDanismani.cs s\u0131n\u0131f\u0131ndan nesne olu\u015fturuldu\u011fu zaman, o s\u0131n\u0131ftaki property ve metodlar g\u00f6z\u00fckmektedir.Base Class\u0131 Personeller.cs oldu\u011fu i\u00e7in kal\u0131t\u0131mla \u00f6zelliklerini ve metodlar\u0131n\u0131 g\u00f6r\u00fcyor.Personeller.cs s\u0131n\u0131f\u0131n\u0131n Base Class\u0131 Insan.cs oldu\u011fu i\u00e7in otomatikman insandaki \u00f6zellikler sat\u0131\u015f dan\u0131\u015fman\u0131na yans\u0131yor.Hiyerar\u015finin sebebi de budur.<\/td>\n<\/tr>\n<tr>\n<td>\n<pre><a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/03\/musteri-300x214.jpg\"><img loading=\"lazy\" decoding=\"async\" title=\"musteri-300x214\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/03\/musteri-300x214.jpg\" alt=\"\" width=\"300\" height=\"214\" \/><\/a><\/pre>\n<\/td>\n<td>Yanda g\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi Musteriler.cs s\u0131n\u0131f\u0131ndan nesne olu\u015fturdu\u011fumuz zaman, o s\u0131n\u0131ftaki \u00f6zellik ve metodlarla birlikte kal\u0131t\u0131m ald\u0131\u011f\u0131 Insan.cs s\u0131n\u0131f\u0131ndaki \u00f6zelliklerde g\u00f6z\u00fckmektedir.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<pre> Hiyerar\u015fi yukar\u0131da anlatt\u0131\u011f\u0131m gibidir.Genel mant\u0131k budur.Bu sistemi siz daha iyi geli\u015ftirebilirsiniz.\r\nBuraya kadar\u00a0giri\u015f niteli\u011finde bir tan\u0131t\u0131m yapt\u0131k.Sonraki sayfada mevzuya birazdaha derinden girelim.Kal\u0131t\u0131m\u0131n sistematik mant\u0131\u011f\u0131n\u0131 inceleyelim.<\/pre>\n<p><!--nextpage--><br \/>\n\u00d6nceki sayfalar da kal\u0131t\u0131m konusuna giri\u015f k\u0131vam\u0131ndayd\u0131.Bu sayfada ise kal\u0131t\u0131m\u0131n sistematik mant\u0131\u011f\u0131n\u0131 inceleyece\u011fiz.\u015eimdi bir emlak\u00e7\u0131 mant\u0131\u011f\u0131yla \u00e7al\u0131\u015fan kiral\u0131k ve sat\u0131l\u0131k evlerin kal\u0131t\u0131msal hiyerar\u015fisini kural\u0131m. Kiral\u0131k ve sat\u0131l\u0131k evlerin ortak \u00f6zelliklerini Ev.cs s\u0131n\u0131f\u0131n da haz\u0131rlayal\u0131m. \u00a0<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n---Ev.cs---\r\n    class Ev\r\n    {\r\n        public int OdaSayisi { get; set; }\r\n        public double Alani { get; set; }\r\n        public double Fiyati { get; set; }\r\n        public int Kati { get; set; }\r\n        public bool GarajVarmi { get; set; }\r\n    }\r\n<\/pre>\n<p>Akl\u0131ma geldi\u011fi kadar bir evin ola\u011fan \u00f6zelliklerini yazd\u0131m.\u015eimdi kiral\u0131k evin class\u0131n\u0131 olu\u015ftural\u0131m.Kiralik.cs s\u0131n\u0131f\u0131nda haz\u0131rlayal\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n---Kiralik.cs---\r\n    class Kiralik:Ev\r\n    {\r\n        public int KontratSuresi { get; set; }\r\n    }\r\n<\/pre>\n<p>\u015eimdi de sat\u0131l\u0131k evlerin class\u0131n\u0131 olu\u015ftural\u0131m.Satilik.cs s\u0131n\u0131f\u0131nda haz\u0131rlayal\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n---Satilik.cs---\r\n    class Satilik:Ev\r\n    {\r\n        public int EmlakciKomisyonu { get; set; }\r\n    }\r\n<\/pre>\n<p>\u015eimdi bu olu\u015fturdu\u011fumuz ufak hiyerar\u015fiyi olu\u015fturmam\u0131n sebebi , kal\u0131t\u0131m\u0131n i\u015fleyi\u015f mant\u0131\u011f\u0131n\u0131 anlatmak i\u00e7in olu\u015fturdum.<br \/>\n\u015eimdi Satilik.cs ya da Kiralik.cs&#8217;den nesne olu\u015ftural\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nKiralik kiralikev = new Kiralik();\r\n<\/pre>\n<p>Yukar\u0131da bir adet Kiralik.cs s\u0131n\u0131f\u0131ndan nesne yaratt\u0131k.Asl\u0131nda bu nesne yarat\u0131lmadan \u00f6nce Base Class arka planda bir Ev nesnesi yarat\u0131r, i\u00e7indeki propertyler set edilir,i\u015flemleri yap\u0131l\u0131r daha sonra Kiralik.cs s\u0131n\u0131f\u0131ndan nesne olu\u015fturulur ve i\u015flemleri yap\u0131l\u0131r.<br \/>\nYani anlayaca\u011f\u0131n\u0131z bir s\u0131n\u0131f\u0131n Base Class\u0131n\u0131n constructor\u0131 her zaman Derived Class\u0131n constructor\u0131ndan \u00f6nce \u00e7al\u0131\u015f\u0131r.<br \/>\n\u015eimdi \u00e7al\u0131\u015fma mant\u0131\u011f\u0131 budur.Bu mant\u0131kla haraket edersek olas\u0131 bir ka\u00e7 durum vard\u0131r onlar\u0131 sizlere a\u00e7\u0131klamak istiyorum.<\/p>\n<hr \/>\n<p>\u015eimdi Ev.cs s\u0131n\u0131f\u0131n\u0131n constructor\u0131n\u0131 de\u011fi\u015ftirelim.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n---Ev.cs---\r\n    class Ev\r\n    {\r\n        public int OdaSayisi { get; set; }\r\n        public double Alani { get; set; }\r\n        public double Fiyati { get; set; }\r\n        public int Kati { get; set; }\r\n        public bool GarajVarmi { get; set; }\r\n        public Ev(string rastgeleparametrealsin) { }\r\n    }\r\n<\/pre>\n<p>Yukar\u0131da g\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi Ev.cs s\u0131n\u0131f\u0131n\u0131n constructor\u0131n\u0131 parametreli olarak de\u011fi\u015ftirdim.\u015eimdi bu durumda Kiralik.cs ya da Satilik.cs den bir nesne olu\u015ftural\u0131m.(Kiralik.cs ve Satilik.cs s\u0131n\u0131flar\u0131 de\u011fi\u015ftirilmedi\u011fi i\u00e7in yukar\u0131dakilerin ayn\u0131s\u0131d\u0131r.)<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nKiralik kiralikev = new Kiralik();\r\n<\/pre>\n<p>Bu nesneyi olu\u015fturduktan sonra program\u0131m\u0131z\u0131 derlersek e\u011fer hatayla kar\u015f\u0131la\u015faca\u011f\u0131z.Program derlenmeyecektir.Asl\u0131nda yaz\u0131n\u0131n bu sat\u0131r\u0131na kadar okuduysan\u0131z sebebini biraz d\u00fc\u015f\u00fcn\u00fcp bulabilirsiniz.<br \/>\nBu hatan\u0131n sebebi,yukar\u0131larda bahsetti\u011fim gibi,Kiralik.cs s\u0131n\u0131f\u0131ndan nesne olu\u015fturulmadan \u00f6nce,Base Class tan nesne olu\u015fturulur.Ancak program ak\u0131\u015f\u0131 Base Class&#8217;a gelince parametreli constructordan ba\u015fka bi\u015fey bulamayacakt\u0131r.Biliyoruz ki bir classa parametreli constructor yaz\u0131nca ve bo\u015f constructor yazmay\u0131nca, mecbur o s\u0131n\u0131ftan nesne \u00fcretilirken o constructor\u0131n parametrelerine de\u011ferler g\u00f6nderilmelidir.\u00c7\u00fcnk\u00fc bo\u015f constructor olmad\u0131\u011f\u0131 i\u00e7in,mecbur o constructor\u0131 kullanmak zorunda kal\u0131yoruz.<br \/>\nBu sebepten dolay\u0131 Kiralik.cs den nesne olu\u015fturulmadan \u00f6nce Base Class\u0131nda bo\u015f constructor ile nesne olu\u015fturmaya \u00e7al\u0131\u015f\u0131yor.Ev.cs s\u0131n\u0131f\u0131nda bo\u015f constructor olmad\u0131\u011f\u0131ndan ya da Kiralik.cs s\u0131n\u0131f\u0131n\u0131n bo\u015f constructor\u0131ndan Ev.cs i\u00e7indeki ba\u015fka bir constructor referans edilmedi\u011finden dolay\u0131 hata olu\u015fuyor.<br \/>\nBu sorunun \u00e7\u00f6z\u00fcm\u00fc Ev.cs s\u0131n\u0131f\u0131 i\u00e7inde Kiralik.cs s\u0131n\u0131f\u0131 ile uyumlu constructor yazmak gerekiyor.(\u00d6rnekteki \u00e7\u00f6z\u00fcm Ev.cs s\u0131n\u0131f\u0131na bir tane bo\u015f contructor yazmak yeterli olacakt\u0131r.)<br \/>\n\u015eimdi ise varsayal\u0131m ki , Ev.cs s\u0131n\u0131f\u0131 i\u00e7ine Kiralik.cs ile uyumlu constructor yazmad\u0131k.Ancak Kiralik.cs s\u0131n\u0131f\u0131ndan nesne olu\u015ftururken Base Classtaki parametreli constructor\u0131 kullanmay\u0131 g\u00f6relim.<br \/>\nKiralik.cs s\u0131n\u0131f\u0131n\u0131 \u015fu \u015fekilde d\u00fczenleyece\u011fiz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n---Kiralik.cs---\r\n    class Kiralik:Ev\r\n    {\r\n        public int KontratSuresi { get; set; }\r\n        public Kiralik(): base(\"RastgeleDe\u011fer\")\r\n        { }\r\n    }\r\n<\/pre>\n<p>Yukar\u0131da g\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi,Kiralik.cs ye bir constructor yazd\u0131m ve &#8220;:&#8221; operat\u00f6r\u00fcn\u00fc kullanarak &#8220;base&#8221; tag\u0131yla Base Classtaki constructora de\u011fer g\u00f6nderdim.base tag\u0131,Base Classtaki constructorlara ula\u015fmam\u0131z\u0131 sa\u011fl\u0131yor.(\u00d6rnek verdi\u011fim projede Satilik.cs s\u0131n\u0131f\u0131da Ev.cs s\u0131n\u0131f\u0131ndan kal\u0131t\u0131m ald\u0131\u011f\u0131 i\u00e7in ayn\u0131 i\u015flemleri ona uyguluyorum.)<br \/>\nBu olas\u0131 hataya d\u00fc\u015ferseniz \u015fimdiden \u00f6nlemini almak i\u00e7in bahsettim.<br \/>\n\u015eimdi bir sonraki sayfada virtual ve override kavramlar\u0131ndan bahsedece\u011fim.<br \/>\n<!--nextpage--><br \/>\nBu sayfada virtual ve override kavramlar\u0131na de\u011finece\u011fim.Bu kavramlar\u0131 ne gibi durumlarda ve ni\u00e7in kullanaca\u011f\u0131z onlar\u0131 inceleyece\u011fiz.<br \/>\nVirtual: E\u011fer Base Class i\u00e7indeki bir metod(i\u015flev), Derived Classlarda farkl\u0131 bir bi\u00e7imde kullan\u0131lacaksa,o metod Base Class i\u00e7inde virtual olarak tan\u0131mlanmal\u0131d\u0131r.B\u00f6ylece , bu classtan t\u00fcreyen classlar, kendi i\u00e7lerinde Base Class da virtual olarak belitilen metodlar\u0131 yeniden tan\u0131mlayabileceklerdir.<br \/>\nOverride : Bir classa kal\u0131t\u0131m yolu ile ge\u00e7en ve virtual olarak tan\u0131mlanm\u0131\u015f yap\u0131lar(metod,property) yeniden tan\u0131mlan\u0131p farkl\u0131 i\u015flemler yap\u0131labilir.(override yaz\u0131p bir bo\u015fluk b\u0131rak\u0131yoruz.Sonra metod ya da property se\u00e7tikten sonra &#8220;Tab&#8221; tu\u015funa bas\u0131yoruz.)<\/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\u0131m da C#&#8217;ta inheritance(Kal\u0131t\u0131m,Miras) kavram\u0131ndan bahsedece\u011fim.Inheritance,OOP(Object Oriented Programming &#8211; Nesne Y\u00f6nelimli Programlama) tekniklerinden birisidir.S\u0131n\u0131flar aras\u0131 hiyerar\u015fik yap\u0131 kurabilmek, olu\u015fturmak i\u00e7in kullan\u0131l\u0131r.Bir s\u0131n\u0131f,ba\u015fka bir s\u0131n\u0131ftan t\u00fcreyerek(kal\u0131t\u0131m alma) , o s\u0131n\u0131f\u0131n public ve protected tan\u0131ml\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":[157,155,156],"class_list":["post-246","post","type-post","status-publish","format-standard","hentry","category-c-sharp-c","tag-inheritance","tag-kalitim","tag-miras"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/246","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=246"}],"version-history":[{"count":0,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/246\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=246"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=246"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=246"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}