Yazilim Mutfagi Dersleri (C#) Ders 1 – Giris

The Common Language Runtime (Ortak Çalisma Dili)

CLR; isletim sistemi ile DotNET ile yazilmis programlar arasinda bulunan bir ara katmandir.  DotNET’de gelistirdigimiz hiçbir uygulama direk olarak isletim sistemi ile haberlesmez. Uygulamamiz CLR ile haberlesir, CLR ise Isletim sistemi ile haberleserek gerekli islemleri yaptirir. Böylece gelistirdigimiz uygulamalarda bellek kontrolü, programin kod güvenligi, uygulamamizin normal Windows fonksiyonlarina zarar vermesinin engellenmesi gibi bir çok zaman alici ama bir o kadarda önemli olan islemleri CLR devralarak bize zaman kazandirir.

.

MSIL (Microsoft Intermediate Language) Code – Ortak Ara Dil

DotNet’de bulunan herhangi bir dille (C#.NET, VB.NET,C++.NET) yazdigimiz bir uygulamayi derledigimiz zaman kaynak kodumuz çalistirilabilir bir exe’ye dönüsmez. Bunun yerine CLR tarafindan yorumlanabilecegi bir ara dile dönüstürülür. Simdilik sadece söylemde kalsada MSIL isletim sistemi ve donanim bagimsiz olarak tasarlanmistir. MSIL ortak ara koda çevrilen uygulamamizi bulundugu isletim sistemine göre çalistirilabilir bir hale çevirerek uygulamamizin çalismasini saglar. DotNet de yazdigimiz tüm kodlar ortak dile çevrildigi için bir uygulama içinde hangi dili kullandigimizin bir önemi yoktur. Bu sayede C# bilen bir programci ile VB.NET bilen bir programci ayni projede kod yazarak uygulama gelistirebilirler.

The Common Type System CTS (Ortak Tipler Sistemi)

DotNet de bulunan tüm dillerde yazilan kodlar ortak bir tip standardina göre ara dile çevrilir. Böylece farkli dillerde yazilmis olan uygulamalar birbiri ile kolayca haberlesebilir.  Dillerde tanimlamalar farkli olsa bile derlenen kodlar ara koda çevrilirken ortak bir standarda dönüstürülmüs olur Örnegin C# da int, VB.NET de Integer veri tipleri ara koda dönüsürken Int32 olarak dönüstürülür.

Garbage Collection (Çöp Toplayici)

CLR Garbage Collection adinda bir çöp toplayici içerir. Çöp toplayici alt seviyede ç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üre çalistiktan sonra isletim sistemine iade etmeyi unuttugunuz bir hafiza alani uygulamanizin çökmesine sebep olacaktir. C# bizi bu islemi otomatik olarak yaparak büyük bir dertten kurtariyo

.NET Framework

CLR, 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.

Ilk Merhaba Dünya Konsol Uygulamamizi Yazalim

Bir sonraki kisimda bir C# uygulamasini Visual Studio kullanarak ve kullanmayarak ayri ayri gelistirecegiz. Böylece basit bir C# uygulamasi nasil yazilir nasil derlenir ve nasil çalistirilir görmüs olacagiz.

Visual Studio kullanmadan Çalismak

Notepad veya baska bir text editörü açin ve asagidaki kodu yazip .cs uzantili olarak kaydedin. Örnegin IlkUygulama.cs.

using System;
namespace IlkCSharpUygulamasi
{
 class MerhabaDunya
  {
    static void Main(string[] args)
      {
          Console.Write("Merhaba Dünya");
      }
  }
}

Dosyanizi kaydettikten sonra Programlar içinden Visual Studio .NET/2005/2008 menüsü altinda Visual Studi Tools Menusü altinda bulunan Visual Studio 2008 Command Prompt komut islemcisini açin.

Yukaridaki ekranda IlkUygulama.cs dosyasinin bulundugu klasöre gidin ve csc IlkUygulama.cs yazarak Entera basin. Böylece uygulamamiz derlenerek bir exe olusturulacak.

Olusturulan IlkUygulama.exe yi çalistirdiginiz zaman Ekrana Merhaba Dünya yazdigini göreceksiniz.

Visual Studio Kullanarak Çalismak

Visual Studio yu açin. Ben 2008 versiyonuna göre anlatacagim. IDE’ler arasinda kullanim olarak çok büyük farkliliklar yok.  File ->New -> Project menusunu açin.

Yukaridaki ekranda da gördügünüz gibi proje tipleri geldi biz Console Application seçip uygulamamiza MerhabaDunyaUygulamasi adini vererek Ok’ e basiyoruz.

using System;

namespace MerhabaDunyaUygulamasi
{
    class Program
    {
        static void Main(string[] args)
        {
        }
    }
}

Yukarida Visual Studio nun bizim için olusturdugu kodu görüyorsunuz. Main() fonksiyonu içine asagidaki kodu yazin.

Console.Write("Merhaba Dünya");

Kodumuzun yeni hali asagidaki gibi olmali.

using System;
namespace MerhabaDunyaUygulamasi
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.Write("Merhaba Dünya");
        }
    }
}

CTRL + F5 tuslarina basarak uygulamamizi çalistirin. Ekranda Merhaba Dünya yazisiniz göreceksiniz. Konsol Ekranini kapatmak için herhangi bir tusa basin.

Merhaba Dünya Uygulamamizi Anlayalim

Uygulamamizin ilk satiri using System; ile basliyor. Bu konu hakkinda ileride bilgi verecegim ilk olarak kodumuzun ikinci satiri olan namespace MerhabaDunyaUygulamasi kismindan bahsedelim.

 .

Namespaceler


Namespaceler siniflarimizi tekil bir isim altinda paketlememizi saglar. Büyük bir uygulamada birden çok sinif olabilir. C# ayni uygulamada ayni isimli iki sinif tanimlamamiza izin vermez. Eger biz bu siniflari farkli namespace iç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. Örnegin Network ile ilgili islemleri yapan siniflarimiz Network isimli namespace içine dosya islemleri ile ilgili siniflarimizi da Dosya isimli namespace içine koyarsak kodumuz hem anlasilir olur hem de kolay kodlama yapariz.

Namespaceler fiziksel bir baglantiya sahip degildirler bu yüzden namespace içine koyacagimiz siniflar ayni klasöre içinde olmak zorunda degildirler. Namespaceler; siniflari, eventlari, exceptionlari, delegateleri ve diger namespaceleri içerebilirler. Namespace içerisine koydugumuz namespacelere Internal Namespace denir. Internal namespaceler asagidaki gibi tanimlanir.

namespace Parent
{
    namespace Child
    {
        ....
    }
}

Using Anahtar Kelimesi

Uygulamamizin ilk satiri using System; dir.
using kelimesi ile daha önceden tanimlamis oldugumuz bir namespace içerindeki siniflara erisim saglamis oluyoruz. Uygulamamizda da System namespace’ini ekleyerek System namespace’i içerisinde tanimlanmis olan siniflara erisim saglamis oluyoruz. Ekrana yazdirdigimiz Console sinifi System namespace’i içerisinde tanimlanmis olan bir siniftir. using ile ekledigimiz bir namespace içerinde bulunan Internal namespacelere erisim saglayamayiz. Bunun için Internal olarak tanimlanmis olan namespacede ayrica using ile eklenmis olmasi gerekir.

using System.Collection

 Using ifadesini yukaridaki gibi kullanarak System namespace’i içerisinde bulunan Collection namespace’i içerisinde tanimlanmis olan siniflara erisim saglariz.

Class Anahtar Kelimesi

Tüm C# uygulamalari en az bir sinif(Class) içermek zorundadir. Main() metodu da bu siniflardan birinde bulunmak zorundadir. Siniflar veri alanlari ve BU veri alanlari ile islemler yaparak istedigimiz sonuçlari olusturan metotlarin kombinasyonundan olusan yapilardir. Siniflarla ilgili detayli bilgiyi ilerleyen asamalarda görecegiz.  Siniflar bir Class kelimesi ve bunu izleyen bir sinif ismi ile tanimlanir.

Class Deneme

Main() Metodu

Main metodu uygulamamizin baslangiç kismidir. Uygulamamiz Main metodu ile baslar ve Main metodundan çiktigi zaman biter. CLr tarindan uygulamanin bir örnegini olusturmadan çagirilabilmesi için static olarak tanimlanir. string[] args Main metoduna disaridan parametre gönderebilmek için tanimlanir.

Açiklama Satirlari

Açiklama satirlari programciya kod içerisinde bulunan parçaciklara tanimlama metinleri yazma imkani saglar bu sayede kod parçaciklarinin ne is yaptiklari anlatilmis olur. Kodlarimiz arasina açiklama satirlari eklemek oldukça önemlidir. Sonradan dönüp acaba burada ne yazmisim dememek için kod bloklarini özet bilgilerle açiklamak oldukça paydalidir. Açiklama satirlari derlenme aninda derleyici tarafindan yok sayildiklari için uygulamanin çalismasini etkilemez.

static void Main(string[] args)
{
    //Bu Satir ekrana Merhaba Dünya Yazar.
    Console.Write("Merhaba Dünya");
}

C# da tek bir satirlik açiklama satirlari için // kullanirken birden çok satirdan olusan açiklama satirlari için /*    */ kullaniriz.

static void Main(string[] args)
{
    /* Bu Satir ekrana Merhaba Dünya Yazar.
      Console sinifi System namaspace'i içinde tanimlanmis bir siniftir.
     Write metofuda Console sinifi içeriinde buluna bir static methotdur.
     Bu Kisim derleyici tarafindan yok sayilir.
     */

    Console.Write("Merhaba Dünya");
}

C# da ayrica dokümantasyon için kullanilan bir açiklama yapisi vardir. Siniflarimiz ve metotlarimiz için dokümantasyon yapmak için kullaniriz. /// seklinde kullanilir. Ilerleyen bölümlerde detaylandiracagiz.

/// Bu satir Dökümantasyon satiridir

.

Hatirlamamiz Gereken Önemli Noktalar

  • Çalistirilabilir uygulamaniz bir veya birden çok siniftan olusur.
  • Programinizin giris kismi dönüs degeri olmayan static Main Metotudur.
  • C# büyük küçük harf duyarlidir. Void ile void birbirinden farklidir.
  • Whitespaceler(bosluk, enter,tab) compiler tarafindan yok sayilir. Fakat whitespaceler kodunuzun okunurlulugu açisindan önemlidirler.
  • Uygulamaniz içinde birden çok Main metodu bulunabilir. Bu durumda programin baslangicindan hangisinin çalisacagini belitmeniz gerekir.
  • Namespaceler siniflari paketlediginiz mantiksal bir kavramdir. Javada oldupu gibi fiziksel bir birlesim söz konusu degildir.
  • using kelimesi baska bir namespace içerisinde tanimlanmis olan siniflara erisebilmek için kullanilir.
  • C# da 3 farkli açiklamasa satiri bulunur. Line, Block ve Documentation. Bunlarin hepsi derleyici tarafindan yok sayilir. Sadece kodunuzun okunulabilirliligini artirir ve basla programcilar tarafindan kodunuzu anlasilir kilar.
  • Siniflari namespace içine almak zorunda degilsiniz.
  • Main metodunuz sting[] args parametresi ile tanimlanmak zorunda degildir.

Daha Gelismis Merhaba Dünya Uygulamamiz

Simdiye kadar tüm dünyayi selamlayan bir Merhaba Dünya uygulamasi yaptik. Simdi ise sadece ismi verilen kisiyi selamlayan bir uygulama gelistirelim.

using System;
namespace MerhabaDunyaUygulamasi
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.Write("Lütfen Adinizi Yaziniz : ");
            string ad = Console.ReadLine();
            Console.WriteLine("Merhaba {0} C# da basarilar ", ad);
        }
    }
}

Yukaridaki kodu CTRL+F5 ile çalistirdigimizda ilk olarak ekranda Lütfen adinizi yaziniz ifadesi yer alir ve isminiz yazip entera basana kadar bekler. Console.ReadLine metodu ekranda klavye ile girilen kelimeleri alir.

Bir sonraki dersde görüsmek üzere…..

25 thoughts on “Yazilim Mutfagi Dersleri (C#) Ders 1 – Giris

  1. Android inflate 

    java.lang.OutOfMemoryError problemini çözemedim hocam yardımcı olabilirmisiniz 

  2. oktay, makalede CTRL+F5  ile çaly?tyryn demi?, bu ?ekilde derlersen bekler, sen direk F5 yapty?yn için beklemiyordur. bilgine

  3.  Console.Write("Lütfen Adinizi Yaziniz : ");
                string ad = Console.ReadLine();
                Console.WriteLine("Merhaba {0} C# da basarilar ", ad);
    bu kodda yanly?lyk var eger bu kodu direk kopyala yapy?tyr yapyn merhaba sabri diye beklemez kodun sonuna
    Cosele.ReadLine(); ekleyin ClapClapClapClap
  4. Selamlar,

    istedi?iniz i?i bu kod görür..
    Private void Button1_Click (object sender, EventArgs e)
    {
    if (textBox1.Text == “burayasifreyazilacak”)
    {
    textBox2.Text = “?ifre Do?ru Girildi..”;
    }
    Else 
    {
    textBox2.Text = “?ifre Yanly? Girildi..”;
    }
    }
  5. bir sorum var cevabyny alabylyrsem cok sevinirim soru:ilk text e girilen sifrenin dogrulugunu 2.textte kontrol eden visual c# program kodlaryny yazarmysynyz rica etsem 

  6. Harika olmus. Güzel bir anlatim ellerine saglik. Visual Studio kullanmadan program yazmanin devamini bekliyoruz. 

  7.  slm lar bana asp de fragman sitesi lazim hem kullanici hemde editörü olacak ve acces veri tabaniyla baglanacak cvp yazarseniz sevinirim

     

  8. abi ben bisiy anlamadim aya.daha net anlatsaniz . Visual Studio .NET i bulamadim programlarda. 

  9. hocam elinize saglik bunca yildir programciyim ve hep web programcisiydim masaüstü programlamaya da bir bakayim dedim ve c# in namindan dolayi bunu ögrenmek istedim ama bu kadar yildir bir konuyu bu kadar net ve alternatifli bir anlatima rastlamadim. Gerçekten çok iyi is çikarmissiniz. Kisa bir öneride de bulunmak isterim sadece bu anlatim için, o da su ki eger cdm ile çalismayi da gösteriyorsaniz, ki göstermissiniz, orada klasörler arasinda basit ileri geri içine gir aç vb tarzi kisa kodlari da vermeniz daha iyi olurdu yeni baslayanlar için. Tekrar tesekür ederim. Kolay gelsin

  10. merhaba ibrahim, güzel yorumlarin için tesekkür ederim. 

    sitemizin çok eksigi var ama biz bir türlü firsat bulup halledemedik. yorum eklerken üyelerden isim ve eposta istenmemesi olayini en kisa zamanda halledecegim ins.

     

  11. Arkadasim ellerine, yüregine saglik senin. Su an; en "sevdigi oyuncagi" almis cocuklar kadar sevincliyim anlatamam. Anlatimin, yontemin… Nasil soyleyim; "Anlamak isteyen icin tum sartlari olusturmussun" bundan oteside olmazdi sanirim (sesli ve videolu belki ki onuda ucretli yaparlar "ozel sirketler"). Tekrar yuregine saglik en buyuk takipcilerinden birinim bundan sonra. Kolay gelsin.

    Not : Uye oldum yorum yapabileyim diye ve giris de yaptim ama neden halen isim ve e-posta isteniyor anlmadim.

  12. tebrikler güzel basarili bir giris yazisi olmus oradan oraya ziplamadan direkt c# 🙂

  13. sevindim. yorumunuz için tesekkur ederim. bu aralar yogunluktan dolayi derslerin devamina baslayamadim. en kisa zamanda devami gelecek.
    Yazan : msk Tarih : 14-04-2009 13:56

    ——————————————————————————–

    scada çalisabilecegim ve varolan bi yazilimi gelistirebilecegim sekilde ufak bi egitim

  14. Hasan Bey, dersleri begenmenize sevindim. yorumunuz için tesekkur ederim. bu aralar yogunluktan dolayi derslerin devamina baslayamadim. en kisa zamanda devami gelecek.

  15. scada çalisabilecegim ve varolan bi yazilimi gelistirebilecegim sekilde ufak bi egitim veren site ya da kaynak biliomusunuz acaba??? biliosaniz paylasirsaniz sevinirim. vijeo citect scada tasarim yarismasindan haberdarsinizdir belki. oan katilicam ama son tarih 15 haziran projeyi vermek için. biraz yardima ihtiyacim olabilir. http://www.vijeocitect.com sitesidir. yazilim örnegine oradan bakabilirsiniz. 🙂

  16. Sade ve anlasilir bir anlatim tarzi ile yazilan bu ders notlari için, Sabri Bey’e tesekkürü bir borç biliriz.

ardes için bir cevap yazın Cevabı iptal et

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir