{"id":186,"date":"2009-03-16T17:12:00","date_gmt":"1970-01-01T00:00:00","guid":{"rendered":"http:\/\/www.yazilimmutfagi.com\/?p=186"},"modified":"2009-03-16T17:12:00","modified_gmt":"1970-01-01T00:00:00","slug":"yazilim-mutfagi-dersleri-csharp-ders-1-giris","status":"publish","type":"post","link":"https:\/\/www.yazilimmutfagi.com\/index.php\/2009\/03\/16\/yazilim-mutfagi-dersleri-csharp-ders-1-giris\/","title":{"rendered":"Yazilim Mutfagi Dersleri (C#)  Ders 1 &#8211; Giris"},"content":{"rendered":"<h2>\n\tThe Common Language Runtime (Ortak &Ccedil;alisma Dili)<\/h2>\n<p>\n\tCLR; isletim sistemi ile DotNET ile yazilmis programlar arasinda bulunan bir ara katmandir.&nbsp; DotNET&rsquo;de gelistirdigimiz hi&ccedil;bir uygulama direk olarak isletim sistemi ile haberlesmez. Uygulamamiz CLR ile haberlesir, CLR ise Isletim sistemi ile haberleserek gerekli islemleri yaptirir. B&ouml;ylece gelistirdigimiz uygulamalarda bellek kontrol&uuml;, programin kod g&uuml;venligi, uygulamamizin normal Windows fonksiyonlarina zarar vermesinin engellenmesi gibi bir &ccedil;ok zaman alici ama bir o kadarda &ouml;nemli olan islemleri CLR devralarak bize zaman kazandirir.<\/p>\n<p>\n\t<img decoding=\"async\" alt=\"\" src=\"http:\/\/www.yazilimmutfagi.com\/Makale\/Dersler\/CSharp\/Ders1\/resim1.jpg\" style=\"width: 597px; height: 597px;\" \/><\/p>\n<p>\n\t<a href='www.yazilimmutfagi.com'>.<\/a><\/p>\n<h4>\n\tMSIL (Microsoft Intermediate Language) Code &ndash; Ortak Ara Dil<\/h4>\n<p>\n\tDotNet&rsquo;de bulunan herhangi bir dille (C#.NET, VB.NET,C++.NET) yazdigimiz bir uygulamayi derledigimiz zaman kaynak kodumuz &ccedil;alistirilabilir bir exe&rsquo;ye d&ouml;n&uuml;smez. Bunun yerine CLR tarafindan yorumlanabilecegi bir ara dile d&ouml;n&uuml;st&uuml;r&uuml;l&uuml;r. Simdilik sadece s&ouml;ylemde kalsada MSIL isletim sistemi ve donanim bagimsiz olarak tasarlanmistir. MSIL ortak ara koda &ccedil;evrilen uygulamamizi bulundugu isletim sistemine g&ouml;re &ccedil;alistirilabilir bir hale &ccedil;evirerek uygulamamizin &ccedil;alismasini saglar. DotNet de yazdigimiz t&uuml;m kodlar ortak dile &ccedil;evrildigi i&ccedil;in bir uygulama i&ccedil;inde hangi dili kullandigimizin bir &ouml;nemi yoktur. Bu sayede C# bilen bir programci ile VB.NET bilen bir programci ayni projede kod yazarak uygulama gelistirebilirler.<\/p>\n<h4>\n\tThe Common Type System CTS (Ortak Tipler Sistemi)<\/h4>\n<p>\n\tDotNet de bulunan t&uuml;m dillerde yazilan kodlar ortak bir tip standardina g&ouml;re ara dile &ccedil;evrilir. B&ouml;ylece farkli dillerde yazilmis olan uygulamalar birbiri ile kolayca haberlesebilir.&nbsp; Dillerde tanimlamalar farkli olsa bile derlenen kodlar ara koda &ccedil;evrilirken ortak bir standarda d&ouml;n&uuml;st&uuml;r&uuml;lm&uuml;s olur &Ouml;rnegin C# da int, VB.NET de Integer veri tipleri ara koda d&ouml;n&uuml;s&uuml;rken Int32 olarak d&ouml;n&uuml;st&uuml;r&uuml;l&uuml;r.<\/p>\n<h4>\n\tGarbage Collection (&Ccedil;&ouml;p Toplayici)<\/h4>\n<p>\n\tCLR Garbage Collection adinda bir &ccedil;&ouml;p toplayici i&ccedil;erir. &Ccedil;&ouml;p toplayici alt seviyede &ccedil;alisarak uygulamamizda dinamik olarak olusturulmus ve artik referans edilmeyen verileri hafizadan bosaltarak isletim sistemine iade eder. Bu sayede olusturulmus ve hala kullanilmayan veriler bos yere hafizada yer kaplamaz. C++ kullanmis olanlar bu islemin ne kadar dikkat edilmesi gerektigini bilirler. Aksi takdirde uygulamaniz bir s&uuml;re &ccedil;alistiktan sonra isletim sistemine iade etmeyi unuttugunuz bir hafiza alani uygulamanizin &ccedil;&ouml;kmesine sebep olacaktir. C# bizi bu islemi otomatik olarak yaparak b&uuml;y&uuml;k bir dertten kurtariyo<\/p>\n<h4>\n\t.NET Framework<\/h4>\n<p>\n\tCLR, The Framework Class Library, Veri ve XML siniflarini, Web veya Windows uygulamalarimiz arasindaki kombinasyonu saglayan yapidir. Asagidaki diyagram .NET Framework yapisini daha iyi anlamanizi saglayacaktir.<\/p>\n<p>\n\t<img decoding=\"async\" alt=\"\" src=\"http:\/\/www.yazilimmutfagi.com\/Makale\/Dersler\/CSharp\/Ders1\/resim2.jpg\" style=\"width: 574px; height: 363px;\" \/><\/p>\n<h4>\n\tIlk Merhaba D&uuml;nya Konsol Uygulamamizi Yazalim<\/h4>\n<p>\n\tBir sonraki kisimda bir C# uygulamasini Visual Studio kullanarak ve kullanmayarak ayri ayri gelistirecegiz. B&ouml;ylece basit bir C# uygulamasi nasil yazilir nasil derlenir ve nasil &ccedil;alistirilir g&ouml;rm&uuml;s olacagiz.<\/p>\n<h4>\n\tVisual Studio kullanmadan &Ccedil;alismak<\/h4>\n<p>\n\tNotepad veya baska bir text edit&ouml;r&uuml; a&ccedil;in ve asagidaki kodu yazip .cs uzantili olarak kaydedin. &Ouml;rnegin IlkUygulama.cs.<\/p>\n<pre class=\"brush:csharp\">\nusing System;\nnamespace IlkCSharpUygulamasi\n{\n class MerhabaDunya\n  {\n    static void Main(string[] args)\n      {\n          Console.Write(&quot;Merhaba D&uuml;nya&quot;);\n      }\n  }\n}<\/pre>\n<p>\n\t<span style=\"font-size: small; font-family: Calibri;\">Dosyanizi kaydettikten sonra Programlar i&ccedil;inden Visual Studio .NET\/2005\/2008 men&uuml;s&uuml; altinda Visual Studi Tools Menus&uuml; altinda bulunan Visual Studio 2008 Command Prompt komut islemcisini a&ccedil;in.<\/span><\/p>\n<p>\n\t<span style=\"font-size: small; font-family: Calibri;\"><img decoding=\"async\" alt=\"\" src=\"http:\/\/www.yazilimmutfagi.com\/Makale\/Dersler\/CSharp\/Ders1\/resim3.jpg\" style=\"width: 597px; height: 284px;\" \/><\/span><\/p>\n<p>\n\tYukaridaki ekranda IlkUygulama.cs dosyasinin bulundugu klas&ouml;re gidin ve csc IlkUygulama.cs yazarak Entera basin. B&ouml;ylece uygulamamiz derlenerek bir exe olusturulacak.<\/p>\n<p>\n\t<img decoding=\"async\" alt=\"\" src=\"http:\/\/www.yazilimmutfagi.com\/Makale\/Dersler\/CSharp\/Ders1\/resim4.jpg\" \/><\/p>\n<p>\n\tOlusturulan IlkUygulama.exe yi &ccedil;alistirdiginiz zaman Ekrana Merhaba D&uuml;nya yazdigini g&ouml;receksiniz.<\/p>\n<h4>\n\tVisual Studio Kullanarak &Ccedil;alismak<\/h4>\n<p>\n\tVisual Studio yu a&ccedil;in. Ben 2008 versiyonuna g&ouml;re anlatacagim. IDE&rsquo;ler arasinda kullanim olarak &ccedil;ok b&uuml;y&uuml;k farkliliklar yok.&nbsp; File -&gt;New -&gt; Project menusunu a&ccedil;in.<\/p>\n<p>\n\t<img decoding=\"async\" alt=\"\" src=\"http:\/\/www.yazilimmutfagi.com\/Makale\/Dersler\/CSharp\/Ders1\/resim5.jpg\" style=\"width: 630px; height: 609px;\" \/><\/p>\n<p>\n\tYukaridaki ekranda da g&ouml;rd&uuml;g&uuml;n&uuml;z gibi proje tipleri geldi biz Console Application se&ccedil;ip uygulamamiza MerhabaDunyaUygulamasi adini vererek Ok&rsquo; e basiyoruz.<\/p>\n<pre class=\"brush:csharp\">\nusing System;\n\nnamespace MerhabaDunyaUygulamasi\n{\n    class Program\n    {\n        static void Main(string[] args)\n        {\n        }\n    }\n}<\/pre>\n<p>\n\tYukarida Visual Studio nun bizim i&ccedil;in olusturdugu kodu g&ouml;r&uuml;yorsunuz. Main() fonksiyonu i&ccedil;ine asagidaki kodu yazin.<\/p>\n<pre class=\"brush:csharp\">\nConsole.Write(&quot;Merhaba D&uuml;nya&quot;);<\/pre>\n<p>\n\tKodumuzun yeni hali asagidaki gibi olmali.<\/p>\n<pre class=\"brush:csharp\">\nusing System;\nnamespace MerhabaDunyaUygulamasi\n{\n    class Program\n    {\n        static void Main(string[] args)\n        {\n            Console.Write(&quot;Merhaba D&uuml;nya&quot;);\n        }\n    }\n}\n<\/pre>\n<p>\n\tCTRL + F5 tuslarina basarak uygulamamizi &ccedil;alistirin. Ekranda Merhaba D&uuml;nya yazisiniz g&ouml;receksiniz. Konsol Ekranini kapatmak i&ccedil;in herhangi bir tusa basin.<\/p>\n<h4>\n\tMerhaba D&uuml;nya Uygulamamizi Anlayalim<\/h4>\n<p>\n\tUygulamamizin ilk satiri <span style=\"color:#0000ff;\">using System;<\/span> ile basliyor. Bu konu hakkinda ileride bilgi verecegim ilk olarak kodumuzun ikinci satiri olan <span style=\"color:#0000cd;\">namespace<\/span> MerhabaDunyaUygulamasi kismindan bahsedelim.<br \/>\n\t<br \/>\n\t&nbsp;<a href='www.yazilimmutfagi.com'>.<\/a><\/p>\n<h4>\n\tNamespaceler<\/h4>\n<p>\n\t<br \/>\n\tNamespaceler siniflarimizi tekil bir isim altinda paketlememizi saglar. B&uuml;y&uuml;k bir uygulamada birden &ccedil;ok sinif olabilir. C# ayni uygulamada ayni isimli iki sinif tanimlamamiza izin vermez. Eger biz bu siniflari farkli namespace i&ccedil;inde tanimlarsak bu sorunu ortadan kaldirmis oluruz. Ayrica namespace kullanarak siniflarimiz arasinda mantiksal bir bag kurmus oluruz. Bu hem kodumuzun okunurlulugunu hem de anlasilabilirliligini arttirir. &Ouml;rnegin Network ile ilgili islemleri yapan siniflarimiz Network isimli namespace i&ccedil;ine dosya islemleri ile ilgili siniflarimizi da Dosya isimli namespace i&ccedil;ine koyarsak kodumuz hem anlasilir olur hem de kolay kodlama yapariz.<br \/>\n\t<br \/>\n\tNamespaceler fiziksel bir baglantiya sahip degildirler bu y&uuml;zden namespace i&ccedil;ine koyacagimiz siniflar ayni klas&ouml;re i&ccedil;inde olmak zorunda degildirler. Namespaceler; siniflari, eventlari, exceptionlari, delegateleri ve diger namespaceleri i&ccedil;erebilirler. Namespace i&ccedil;erisine koydugumuz namespacelere Internal Namespace denir. Internal namespaceler asagidaki gibi tanimlanir.<\/p>\n<pre class=\"brush:csharp\">\nnamespace Parent\n{\n    namespace Child\n    {\n        ....\n    }\n}<\/pre>\n<h4>\n\tUsing Anahtar Kelimesi<\/h4>\n<p>\n\tUygulamamizin ilk satiri using System; dir.<br \/>\n\tusing kelimesi ile daha &ouml;nceden tanimlamis oldugumuz bir namespace i&ccedil;erindeki siniflara erisim saglamis oluyoruz. Uygulamamizda da System namespace&rsquo;ini ekleyerek System namespace&rsquo;i i&ccedil;erisinde tanimlanmis olan siniflara erisim saglamis oluyoruz. Ekrana yazdirdigimiz Console sinifi System namespace&rsquo;i i&ccedil;erisinde tanimlanmis olan bir siniftir. using ile ekledigimiz bir namespace i&ccedil;erinde bulunan Internal namespacelere erisim saglayamayiz. Bunun i&ccedil;in Internal olarak tanimlanmis olan namespacede ayrica using ile eklenmis olmasi gerekir.<\/p>\n<pre class=\"brush:csharp\">\nusing System.Collection<\/pre>\n<p>\n\t&nbsp;Using ifadesini yukaridaki gibi kullanarak System namespace&rsquo;i i&ccedil;erisinde bulunan Collection namespace&rsquo;i i&ccedil;erisinde tanimlanmis olan siniflara erisim saglariz.<\/p>\n<h4>\n\tClass Anahtar Kelimesi<\/h4>\n<p>\n\tT&uuml;m C# uygulamalari en az bir sinif(Class) i&ccedil;ermek zorundadir. Main() metodu da bu siniflardan birinde bulunmak zorundadir. Siniflar veri alanlari ve BU veri alanlari ile islemler yaparak istedigimiz sonu&ccedil;lari olusturan metotlarin kombinasyonundan olusan yapilardir. Siniflarla ilgili detayli bilgiyi ilerleyen asamalarda g&ouml;recegiz.&nbsp; Siniflar bir Class kelimesi ve bunu izleyen bir sinif ismi ile tanimlanir.<\/p>\n<pre class=\"brush:csharp\">\nClass Deneme<\/pre>\n<h4>\n\tMain() Metodu<\/h4>\n<p>\n\tMain metodu uygulamamizin baslangi&ccedil; kismidir. Uygulamamiz Main metodu ile baslar ve Main metodundan &ccedil;iktigi zaman biter. CLr tarindan uygulamanin bir &ouml;rnegini olusturmadan &ccedil;agirilabilmesi i&ccedil;in static olarak tanimlanir. string[] args Main metoduna disaridan parametre g&ouml;nderebilmek i&ccedil;in tanimlanir.<\/p>\n<h4>\n\tA&ccedil;iklama Satirlari<\/h4>\n<p>\n\tA&ccedil;iklama satirlari programciya kod i&ccedil;erisinde bulunan par&ccedil;aciklara tanimlama metinleri yazma imkani saglar bu sayede kod par&ccedil;aciklarinin ne is yaptiklari anlatilmis olur. Kodlarimiz arasina a&ccedil;iklama satirlari eklemek olduk&ccedil;a &ouml;nemlidir. Sonradan d&ouml;n&uuml;p acaba burada ne yazmisim dememek i&ccedil;in kod bloklarini &ouml;zet bilgilerle a&ccedil;iklamak olduk&ccedil;a paydalidir. A&ccedil;iklama satirlari derlenme aninda derleyici tarafindan yok sayildiklari i&ccedil;in uygulamanin &ccedil;alismasini etkilemez.<\/p>\n<pre class=\"brush:csharp\">\nstatic void Main(string[] args)\n{\n    \/\/Bu Satir ekrana Merhaba D&uuml;nya Yazar.\n    Console.Write(&quot;Merhaba D&uuml;nya&quot;);\n}<\/pre>\n<p>\n\tC# da tek bir satirlik a&ccedil;iklama satirlari i&ccedil;in \/\/ kullanirken birden &ccedil;ok satirdan olusan a&ccedil;iklama satirlari i&ccedil;in <span style=\"color:#006400;\">\/*&nbsp;&nbsp;&nbsp; *\/ <\/span>kullaniriz.<\/p>\n<pre class=\"brush:csharp\">\nstatic void Main(string[] args)\n{\n    \/* Bu Satir ekrana Merhaba D&uuml;nya Yazar.\n      Console sinifi System namaspace&#39;i i&ccedil;inde tanimlanmis bir siniftir.\n     Write metofuda Console sinifi i&ccedil;eriinde buluna bir static methotdur.\n     Bu Kisim derleyici tarafindan yok sayilir.\n     *\/\n\n    Console.Write(&quot;Merhaba D&uuml;nya&quot;);\n}<\/pre>\n<p>\n\tC# da ayrica dok&uuml;mantasyon i&ccedil;in kullanilan bir a&ccedil;iklama yapisi vardir. Siniflarimiz ve metotlarimiz i&ccedil;in dok&uuml;mantasyon yapmak i&ccedil;in kullaniriz.<span style=\"color:#008000;\"> \/\/\/<\/span> seklinde kullanilir. Ilerleyen b&ouml;l&uuml;mlerde detaylandiracagiz.<\/p>\n<pre class=\"brush:csharp\">\n\/\/\/ Bu satir D&ouml;k&uuml;mantasyon satiridir<\/pre>\n<p>\n\t<a href='www.yazilimmutfagi.com'>.<\/a><\/p>\n<h4>\n\tHatirlamamiz Gereken &Ouml;nemli Noktalar<\/h4>\n<ul>\n\t<li>\n\t\t&Ccedil;alistirilabilir uygulamaniz bir veya birden &ccedil;ok siniftan olusur.<\/li>\n\t<li>\n\t\tPrograminizin giris kismi d&ouml;n&uuml;s degeri olmayan static Main Metotudur.<\/li>\n\t<li>\n\t\tC# b&uuml;y&uuml;k k&uuml;&ccedil;&uuml;k harf duyarlidir. Void ile void birbirinden farklidir.<\/li>\n\t<li>\n\t\tWhitespaceler(bosluk, enter,tab) compiler tarafindan yok sayilir. Fakat whitespaceler kodunuzun okunurlulugu a&ccedil;isindan &ouml;nemlidirler.<\/li>\n\t<li>\n\t\tUygulamaniz i&ccedil;inde birden &ccedil;ok Main metodu bulunabilir. Bu durumda programin baslangicindan hangisinin &ccedil;alisacagini belitmeniz gerekir.<\/li>\n\t<li>\n\t\tNamespaceler siniflari paketlediginiz mantiksal bir kavramdir. Javada oldupu gibi fiziksel bir birlesim s&ouml;z konusu degildir.<\/li>\n\t<li>\n\t\tusing kelimesi baska bir namespace i&ccedil;erisinde tanimlanmis olan siniflara erisebilmek i&ccedil;in kullanilir.<\/li>\n\t<li>\n\t\tC# da 3 farkli a&ccedil;iklamasa satiri bulunur. Line, Block ve Documentation. Bunlarin hepsi derleyici tarafindan yok sayilir. Sadece kodunuzun okunulabilirliligini artirir ve basla programcilar tarafindan kodunuzu anlasilir kilar.<\/li>\n\t<li>\n\t\tSiniflari namespace i&ccedil;ine almak zorunda degilsiniz.<\/li>\n\t<li>\n\t\tMain metodunuz sting[] args parametresi ile tanimlanmak zorunda degildir.<\/li>\n<\/ul>\n<h4>\n\tDaha Gelismis Merhaba D&uuml;nya Uygulamamiz<\/h4>\n<p>\n\tSimdiye kadar t&uuml;m d&uuml;nyayi selamlayan bir Merhaba D&uuml;nya uygulamasi yaptik. Simdi ise sadece ismi verilen kisiyi selamlayan bir uygulama gelistirelim.<\/p>\n<pre class=\"brush:csharp\">\nusing System;\nnamespace MerhabaDunyaUygulamasi\n{\n    class Program\n    {\n        static void Main(string[] args)\n        {\n            Console.Write(&quot;L&uuml;tfen Adinizi Yaziniz : &quot;);\n            string ad = Console.ReadLine();\n            Console.WriteLine(&quot;Merhaba {0} C# da basarilar &quot;, ad);\n        }\n    }\n}<\/pre>\n<p>\n\tYukaridaki kodu CTRL+F5 ile &ccedil;alistirdigimizda ilk olarak ekranda L&uuml;tfen adinizi yaziniz ifadesi yer alir ve isminiz yazip entera basana kadar bekler. Console.ReadLine metodu ekranda klavye ile girilen kelimeleri alir.<\/p>\n<p>\n\t<img decoding=\"async\" alt=\"\" src=\"http:\/\/www.yazilimmutfagi.com\/Makale\/Dersler\/CSharp\/Ders1\/resim6.jpg\" style=\"width: 604px; height: 333px;\" \/><\/p>\n<p>\n\t<span style=\"font-size: small; font-family: Calibri;\">Bir sonraki dersde g&ouml;r&uuml;smek &uuml;zere&#8230;..<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>C# &#214;grenmek isteyen arkadaslar i&#231;in kaynak olmasi i&#231;in yeni bir yazi dizisine basliyorum. Her dersde adim adim C# kullanmayi anlatacagim. B&#246;ylece hi&#231; C# bilmeyen ziyaret&#231;ilerimize faydali olmak istedim. Ilerleyen derslerde &#252;st seviye bilgilerede &#231;ikacagim&#8230;<\/p>\n","protected":false},"author":517,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[436],"tags":[6470,3856,6453,6477,5532,6294,6394,4157,4626,6419,6374,5964,5860,6428,6143,5356,6323,4892,6206,6447],"_links":{"self":[{"href":"https:\/\/www.yazilimmutfagi.com\/index.php\/wp-json\/wp\/v2\/posts\/186"}],"collection":[{"href":"https:\/\/www.yazilimmutfagi.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.yazilimmutfagi.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.yazilimmutfagi.com\/index.php\/wp-json\/wp\/v2\/users\/517"}],"replies":[{"embeddable":true,"href":"https:\/\/www.yazilimmutfagi.com\/index.php\/wp-json\/wp\/v2\/comments?post=186"}],"version-history":[{"count":0,"href":"https:\/\/www.yazilimmutfagi.com\/index.php\/wp-json\/wp\/v2\/posts\/186\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.yazilimmutfagi.com\/index.php\/wp-json\/wp\/v2\/media?parent=186"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.yazilimmutfagi.com\/index.php\/wp-json\/wp\/v2\/categories?post=186"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.yazilimmutfagi.com\/index.php\/wp-json\/wp\/v2\/tags?post=186"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}