Would you like to react to this message? Create an account in a few clicks or log in to continue.

    C# Programlama Diline Girş

    Admin
    Admin
    Admin
    Admin


    Mesaj Sayısı : 77
    Kayıt tarihi : 25/06/10
    Yaş : 30
    Nerden : Amasya

    C# Programlama Diline Girş Empty C# Programlama Diline Girş

    Mesaj tarafından Admin Perş. Mart 21, 2013 9:00 am

    Visual C#, Visual
    Studio ailesinin yeni üyesidir, bu yeni dil c ve c++ temelleri üzerine kurulmasına
    rağmen komponent temelli programlama tekniğini geliştirmek için birtakım yeni
    özellikler eklenmiştir. C# dilinin sentaksı C ve C++ programcılarına çok tanıdık
    gelecektir. Bundan şüpheniz olmasın.

    C# Programlama Diline Girş Visual_studio

    Genel Açıklamalar


    Bu yazıda göreceğimiz
    basit uygulamada QuickSort algoritmasını kullanarak nasıl basit bir C# projesinin
    oluşturulduğunu göreceğiz. Bu uygulamada bir c# programında en sık kullanılan
    yapılardan olan dosyaya ve console ekranına okuma/yazma, fonksiyon oluşturma ve
    basit dizilerin kullanımı açıklanacaktır.

    Bu yazı kesinlikle C# dilinin tüm özelliklerinin anlatıldığı yazı değildir. Bu
    yazı C# dilini öğrenmek için sizlere bir başlangıç noktası sunar.

    Önerilen Kaynaklar


    Visual Studio.NET
    (Beta 2 veya sonrası) örnek kaynak kodu derlemeniz için gereklidir. C/C++ bilgisi
    size bu yazıyı anlamanızda yardımcı olabilir ama gerekli değildir.
    Adım
    1. Projeye Başlama



    Visual Studio ile
    program geliştirme organizasyonu solution(çözüm) çalışma alanları üzerindendir. Solution
    dediğimiz ortam bir veya daha fazla projeyi içerebilir. Bu makale için tek bir
    C# projesi içeren bir solution oluşturacağız.


    Yeni bir proje
    oluşturmak




    1. Visual Studio.NET
      ortamından, File | New | Project menülerini
      seçin.
      C# Programlama Diline Girş Step1a
    2. Soldan(Project
      Types) Visual C#, sağdan(Templates) ise Console
      Application butonlarını seçin.
      C# Programlama Diline Girş Step1b
    3. Projenizin
      adını belirleyin ve projenizin hangi klasörde saklanacağını belirleyin.Bu
      klasör Visual Studio tarafından otomatik oluşturulur.Proje adı olarak ben
      quicksort yazıyorum.Siz istediğiniz adı verebilirsiniz.
      C# Programlama Diline Girş Step1c
    4. OK tuşuna basalım
      ve yola koyulalım.

    "Visual C#
    Solution" ortamımız



    Visual Studio.NET
    içinde bir Visual C# projesi bulunan bir solution oluşturdu. Proje assemblyinfo.cs
    ve class1.cs adlı iki tane dosya içermektedir.
    Bundan sonraki
    adımlarda projemizi nasıl derleyeceğimizi ve bu iki dosya hakkında detaylı bilgiyi
    öğreneceğiz.


    Adım
    2. Hello, World!



    Kusura
    bakmayın ama geleneği
    bozmadan ilk defa C programlama dili ile yazılmış olan "Hello, World!" programını
    c# ile yazacağız. Bu bir gelenektir ve her yeni bir dili öğrenmeye başladığınızda
    bunu siz de göreceksiniz.


    Kaynak Kodu Değiştirme



    1. Solution Explorer
      'da bulunan 'class1.cs'dosyasına çift tıklayın. Solution Explorer 'ı göremiyorsanız,
      view menüsünü kullanarak görünür hale getirebilirsiniz.
    2. Şablonla oluşturulmuş
      koda aşağıda kırmızı ile yazılmış kısmı ekleyin (class1.cs).
      using
      System;

      namespace quicksort
      {
      ///
      /// Summary description for Class1.
      ///
      class Class1
      {
      static void Main(string[]
      args)
      {
      //
      // TODO: Add code to start application
      here
      //
      Console.WriteLine
      ("Hello, C#.NET World!");
      }
      }
      }
    3. Dikkat edin
      siz kodunuzu yazdıkça Visual Studio size sınıflar ve fonksiyon adları hakkında
      bilgi verir, çünkü .NET Framework tip bilgisini yayınlamaktadır.

      C# Programlama Diline Girş Step2a

      C# Programlama Diline Girş Step2b

    Uygulamamızı Derleyelim




    1. Programımızda
      değişiklik yaptığımıza göre artık Build menüsünden Build 'ı seçerek programımızı
      derleyebiliriz.
      C# Programlama Diline Girş Step2c
    2. Hata ve mesajlar
      en altta bulunan "Output Window" denilen pencerede görünür. Eğer
      herhangi bir hata yoksa uygulamamızı Debug menüsü altında bulunan 'Start
      without Debugging' menüsüne tıklayarak çalıştırabiliriz.

      C# Programlama Diline Girş Step2d

    Programımızın
    Çıktısı



    Aşağıda programımızın
    Visual C# içinden çalıştırılarak oluşturulmuş çıktısının ekran görüntüsü mevcuttur.
    C# Programlama Diline Girş Step2e

    Değişiklikleri
    Anlamak



    System.Console sınıfına ait WriteLine()
    fonksiyonu
    kendisine argüman olarak gönderilen dizgeyi sonuna satır sonu karakteri de
    ekleyerek ekrana yazar.
    Bu
    fonksiyon integer ve floating-point gibi diğer veri tiplerini de argüman olarak
    alabilir.

    Program belleğe
    yüklendiğinde programın kontrolu Main() fonksiyonuna gelir.WriteLine() fonksiyonunu oraya yazmamızın
    sebebi budur.

    Adım
    3. Programın Yapısı



    Şimdi basit bir Hello World
    uygulaması geliştirmiş olduk, şimdi de bir Visual C# uygulamasının basit
    componentlerini inceleyelim.


    Kaynak Kod Yorumları


    // karakterlerinden
    sonra gelen ve satırın sonuna kadar olan sözcükler yorum satırlarıdır ve C# derleyicisi
    tarafından görünmezler. Aynı zamanda birden fazla satıra yorum eklemek istiyorsak
    /* */ karakterleri arasına yorum yazarız.

    // Bu satır derleyici
    tarafından görülmez
    /* Aynı zamanda bu blok da
    derleyici tarafından görünmez*/


    Using Komutu


    .NET Framework geliştiricilere
    yüzlerce yararlı sınıflar sunar. Mesela, Console sınıfı, console ekranına ait
    girdi ve çıktıları işler. Bu sınıflar hiyerarşik bir ağaç içinde organize edilmiştir.
    Aslında Console sınıfının tam ismi System.Console ' dur. Diğer sınıflar ise System.IO.FileStream
    ve System.Collections.Queue. içindedirler.


    using komutu bize
    sınıfın ismini namespace(isim alanı) kullanmadan kullanabilmemizi sağlar.
    Aşağıda kırmızı ile yazılan yazılar using komutunun uygulamasının sonucudur.
    using
    System;
    class Class1
    {
    static void Main(string[]
    args)
    {
    System.Console.WriteLine ("Hello, C#.NET World!");
    Console.WriteLine
    ("Hello, C#.NET World!");
    }
    }



    Sınıf Bildirimi


    C++ ve Visual Basic
    'den farklı olarak C# 'da bütün fonksiyonlar bir sınıf içerisinde olmalıdır. C#
    'da bir sınıf tanımlamak için class anahtar sözcüğü kullanılır.Bu durumda bizim
    uygulamamızda, Class1 sınıfı Main() adında bir fonksiyon içerir. Eğer sınıf bildirimini
    bir isim alanı blokları içine alırsak sınıflarımızı CSharp.QuickSortApp şeklinde
    bir hiyerarşi içine alabiliriz.

    Sınıflar hakkında çok derin bir bilgi vermeyi düşünmüyorum.Fakat bizim örneğimizin
    neden bir parçası olduğunu açıklamakta fayda gördüm.

    Main() Fonksiyonu


    Program belleğe yüklendiğinde
    Main() fonksiyonu programın kontrolünü eline alır, bu yüzden başlangıç kodlarımızı
    daima Main() fonksiyonu içinde yazmalıyız. Komut satırı argümanları ise bir string
    dizisi olan args dizisine aktarılır.(mesela: delete x ) Burada programımızın adı
    delete ise x bir komut satırı argümanıdır.
    Adım
    4. Console Girişi



    Şimdi işlemlerimize
    bir QuickSrot uygulaması geliştirerek devam edelim. İlk yapmamız gereken kullanıcya
    hedef ve kaynak dosyasının isimlerini sormak olacaktır.

    Source Code Modifications



    1. class1.cs dosyasına
      aşağıda kırmızı ile yazılanları yazın. Burada sınıf ismi ve isimalanı ismi
      bizim için çok önemli değildir.
      // namespaces
      ekleme
      using System;

      // namespace tanımlama
      namespace MsdnAA
      {
      // uygulama sınıfı tanımlama
      class QuickSortApp
      {
      // uygulama oluşturma
      static void Main (string[] szArgs)
      {
      // Programın
      hakkında
      Console.WriteLine ("QuickSort
      C#.NET Sample Application\n");

      // kullanıcıdan bilgi alma
      Console.Write
      ("Source: ");
      string szSrcFile = Console.ReadLine
      ();
      Console.Write ("Output: ");
      string szDestFile = Console.ReadLine
      ();
      }
      }
      }

    Console'dan Okuma


    Console sınıfının ReadLine() metodu
    kullanıcıya bir giriş ekranı sunar ve geriye kullanıcının girdiği dizgeyi(string)
    geri döndürür.Bu metod bellek tahsisatını otomatik olarak kendi içinde yapmaktadır
    ve .NET garbage collector mekanizması sayesinde iade etmeniz gereken herhangi
    bir alan yoktur.

    Program Çıktısı


    Programı Debug
    | Start Without Debugging
    menülerini kullanarak çalıştırın.
    Aşağıda programımızın son halinin çıktısını görüyorsunuz.
    C# Programlama Diline Girş Step4a

    Adım
    5. Dizilerin Kullanımı

    Programımız
    sıralama yapmadan önce girişten satırları alarak bir dizi içinde saklaması gerekir.
    Şimdi .NET temel sınıflarından olan ArrayList sınıfını inceleyeceğiz.

    Kaynak Kod Değişikliği



    1. class1.cs dosyası
      içinde aşağıda kırmızı ile gösterilen yerleri ekleyin.
      // isim alanı
      ekleme
      using System;
      using System.Collections;

      // isimalanı tanımlama
      namespace c#nedircom
      {
      // uygulama sınıfı tanımlama
      class QuickSortApp
      {
      // uygulama başlangıcı
      static void Main (string[] szArgs)
      {

      Console.WriteLine ("QuickSort
      C#.NET Sample Application\n");

      // Dosya isimlerini almak için
      komut yaz
      Console.Write ("Source: ");
      string szSrcFile = Console.ReadLine
      ();
      Console.Write ("Output: ");
      string szDestFile = Console.ReadLine
      ();


      // TODO: Read contents of source file
      ArrayList szContents = new ArrayList
      ();
      }
      }
      }

    ArrayList sınıfının
    kullanımı



    ArrayList sınıfına
    direkt ulaşabilmek için System.Collections isimalanını projemize using komutuyla
    ekliyoruz. Bu sınıf dinamik olarak büyüyüp küçülebilen nesne dizileri için kullanılır.
    Yeni bir eleman eklemek için basit bir şekilde Add() metodunu kullanabilirsiniz.
    Bu diziye eklenen yeni eleman orijinal nesne için referans olarak kullanılır, ve
    garbage collector alan iadesi için hazır olacaktır.

    string szElement
    = "insert-me";
    ArrayList szArray = new ArrayList ();
    szArray.Add (szElement);
    Dizinin var olan bir
    elemanına ulaşabilmek için, diziye ait Item() metoduna ulaşmak istediğimiz elemanın
    sıra(index) numarasını geçebiliriz.Kısaca [] operatörlerini kullanarak da
    istediğimiz elemana Item() metodunu kullanmadan da ulaşabiliriz.


    Console.WriteLine
    (szArray[2]);
    Console.WriteLine (szArray.Item (2));
    ArrayList
    sınıfının daha birçok metodu vardır, ancak biz bu uygulamada sadece ekleme ve okuma yapacağız.
    ArrayList sınıfına ait tüm metod ve özellikleri öğrenmek için MSDN kitaplığına
    başvurabilirsiniz.


    Adım
    6. File Girdi/Çıktı(Input/Output)



    Şimdi isterseniz dosyadan
    okuma ve dosyaya yazma işlemlerini gerçekleştirelim. Dosyadaki her satırı okuyup,
    bir string dizisinin her elemanını bir satır gelecek şekilde ekleyeceğiz.Sonraki
    aşamada ise QuickSort algoritmasını kullanarak diziyi sıralı bir şekilde yazacağız.


    Kaynak Kod Değişikliği



    1. class1.cs dosyasına
      aşağıda kırmızı ile yazılanları yazın. Burada sınıf ismi ve isimalanı ismi
      bizim için çok önemli değildir.
      // isimalanı
      ekleme
      using System;
      using System.Collections;
      using System.IO;


      namespace MsdnAA
      {

      class QuickSortApp
      {

      static void Main (string[] szArgs)
      {

      string szSrcLine;
      ArrayList szContents = new ArrayList
      ();
      FileStream fsInput = new FileStream
      (szSrcFile, FileMode.Open,FileAccess.Read);
      StreamReader srInput = new StreamReader
      (fsInput);
      while ((szSrcLine = srInput.ReadLine
      ()) != null)
      {
      // dizinin sonuna
      ekleme
      szContents.Add (szSrcLine);
      }
      srInput.Close ();
      fsInput.Close ();

      // TODO: Buraya QuickSort fonksiyonu
      gelecek

      // sıraları satırları yazma
      FileStream fsOutput = new FileStream
      (szDestFile,FileMode.Create, FileAccess.Write);
      StreamWriter srOutput = new StreamWriter
      (fsOutput);
      for (int nIndex = 0; nIndex <
      szContents.Count; nIndex++)
      {
      // hedef dosyaya
      satır yazma
      srOutput.WriteLine
      (szContents[nIndex]);
      }
      srOutput.Close ();
      fsOutput.Close ();

      // başarıyı kullanıcıya bildirme
      Console.WriteLine ("\nThe sorted
      lines have been written.\n\n");
      }
      }
      }

    Kaynak Dosyadan
    Okuma



    Kaynak dosyayı açmak
    için FileStream sınıfını ve StreamReader sınıfını kullanarak ReadLine() metodu
    ile dosyayı okuyoruz. ReadLine() metodunu dosyanın sonunu ifade eden NULL değerine
    geri dönene kadar çağırıyoruz.Döngü içinde okunan satırları dizinin içine ekliyoruz
    ve sonrada tüm nesneleri kapatıyoruz.

    C# Programlama Diline Girş Step6a

    Hedef Dosyaya
    Yazma



    Dosyaya yazarken dizinin
    sıralanmış olduğunu varsaydık ve öyle devam ettik. Aynı şeklide FileStream nesnesini
    ve StreamWriter sınıfını kullanarak hedef dosyaya yazma işlemini yaptık.

    C# Programlama Diline Girş Step6b
    Adım
    7. Fonksiyon Yaratma



    Son aşamada diziyi
    QuickSort algoritması ile sıralayan fonksiyonu yazmaya geldi. Bu fonksiyonu uygulamamızın
    ana sınıfının içine koyacağız.


    Kaynak Kod Değişikliği



    1. class1.cs dosyasına
      aşağıda kırmızı ile yazılanları yazın. Burada sınıf ismi ve isimalanı ismi
      bizim için çok önemli değildir.
      // isim alanı
      ekleme
      using System;
      using System.Collections;
      using System.IO;


      namespace c#nedircom
      {

      class QuickSortApp
      {

      static void Main (string[] szArgs)
      {
      ... ... ...


      // QuickSort fonksiyonuna parametrelerin geçişi
      QuickSort (szContents, 0, szContents.Count
      - 1);

      ... ... ...
      }

      //
      QuickSort fonksiyonu
      static void QuickSort (ArrayList szArray, int
      nLower, int nUpper)
      {

      if (nLower < nUpper)
      {
      // Ayırma ve sıralama
      işlemi
      int nSplit = Partition
      (szArray, nLower, nUpper);
      QuickSort (szArray,
      nLower, nSplit - 1);
      QuickSort (szArray,
      nSplit + 1, nUpper);
      }
      }

      // QuickSort bölmelere ayırma
      static int Partition (ArrayList szArray, int
      nLower, int nUpper)
      {
      // İlk elemanı bulma
      int nLeft = nLower + 1;
      string szPivot = (string) szArray[nLower];
      int nRight = nUpper;

      // Dizi elemanlarını bölme
      string szSwap;
      while (nLeft <= nRight)
      {

      while (nLeft <=
      nRight)
      {
      if
      (((string) szArray[nLeft]).CompareTo (szPivot) > 0)

      break;
      nLeft
      = nLeft + 1;
      }
      while (nLeft <=
      nRight)
      {
      if
      (((string) szArray[nRight]).CompareTo (szPivot) <= 0)

      break;
      nRight
      = nRight - 1;
      }

      // Eğer uygunsa
      yer değiştirme işlemi yap
      if (nLeft < nRight)
      {
      szSwap
      = (string) szArray[nLeft];
      szArray[nLeft]
      = szArray[nRight];
      szArray[nRight]
      = szSwap;
      nLeft
      = nLeft + 1;
      nRight
      = nRight - 1;
      }
      }

      szSwap = (string) szArray[nLower];
      szArray[nLower] = szArray[nRight];
      szArray[nRight] = szSwap;
      return nRight;
      }
      }
      }

    QuickSort() Fonksiyonu


    Bu fonksiyon alt sınır,
    üst sınır ve bir dizi olmak üzere 3 tane parametre almaktadır. QuickSort fonksiyonu
    Partition() fonksiyonunu çağırarak diziyi iki parçaya ayırır. Bu parçaların birinde
    belirlenen bir diziden önceki ,diğer parçasında ise sonraki elemanlar bulunur.
    Sonra fonksiyon tekrar kendini çağırarak bu iki parçanın sıralanmasını sağlar.

    Yukarıdaki kodlarda
    yeni gördüğümüz metod CompareTo() metodudur. Bu metod iki string ifadesini karşılaştırır.

    QuickSort Uygulamasını
    Çalıştırma



    Bu adım uygulamamızın
    son adımı olacaktır.Şimdi programımızı derleyip çalıştırabiliriz. Programımızın
    çalışması için bir text dosyası oluşturmamız sıralama yapabilmek için gerekecek.
    Exe dosyasının bulunduğu dizini text dosyasını oluşturup programı çalıştıralım.
    C# Programlama Diline Girş Step7a

    Programın Çıktısı


    Aşağıda programımızı
    çalıştırdıktan sonraki ekran çıktısı mevcuttur. Yukarıdaki ekranda ise output.txt
    dosyasında meydana gelen değişiklikleri görebilirsiniz.

    C# Programlama Diline Girş Step7b
    Adım
    8. Debugger Kullanmak



    Debugger aracı programımızın
    problemlerini çözmek için önemli ve gerekli bir araçtır. İyi bir başlangıç yaptığımıza
    göre son aşamada programımız içinde nasıl dolaşacağımıza ve QuickWatch' ı nasıl
    kullanacağımıza bakalım.

    Breakpoint' leri
    Ayarlama



    Program Debugger içinde
    çalışırken eğer breakpoint olan bir noktaya gelinirse program sonlandırılır ve
    debugger control 'ü bizim elimize geçer. Herhangi bir satıra breakpoint koymak
    için ilgili satıra sağ tıklayıp aşağıdaki gibi Insert BreakPoint menüsüne tıklayın.

    C# Programlama Diline Girş Step8a
    BreakPoint bulunan
    satırlar kırmızı ile gösterilir. BreakPoint ' i kaldırmak için ilgili satıra
    sağ tıklayıp Remove BreakPoint menüsünü seçin.



    Program içinde
    Adım Adım ilerlemek



    Aşağıdaki şekilde
    görüldüğü gibi bir breakpoint oluşturduktan sonra debugger ile programımızı çalıştıralım.
    Debug menüsünden daha önceden de yaptığımızı gibi Start Without Debugging yerine Start
    menüsüne tıklayın. Bu şekilde programı çalıştırdığımızda program debugger ile
    çalışmaya başlayacaktır, ve breakpoint 'ler aktif olmaya başlayacaktır.

    Program breakpoint 'in olduğu noktaya geldiğinde, debugger programın kontrolünü
    alır. Aşağıdaki şekilde görüldüğü gibi sarı okla programın geldiği nokta gösterilir.

    C# Programlama Diline Girş Step8b
    Kod içinde adım
    adım ilerlemek için menü çubuğundan Debug | Step Over ' ı seçerek sarı okun
    hareketini izleyin. Debug | Step Into komutu gitmek istediğimiz
    fonksiyona gitmemizi sağlar. Aşağıda iki defa Step Over menüsünü seçtikten sonra
    kaynak kodumuzun görüntüsü mevcuttur.


    C# Programlama Diline Girş Step8c
    Eğer programımızın
    diğer bir sonlandırıcı nedene (yeni bir breakpoint, exception , exit, debug)
    gelene kadar devam etmesini istiyorsanız Debug | Continue menülerini seçin.



    Değişken Değerlerini
    Takip Etme



    Debugger 'ın kontrolü
    bizde iken farenin imlecini kaynak kodda istediğimiz değişken üzerine götürerek
    değişkenin o anki değerini öğrenebiliriz.

    C# Programlama Diline Girş Step8d
    Aynı zamanda bir
    değişkene sağ tıklayarak QuickWatch menüsünü açabilirsiniz. QuickWatch ile değişken
    hakkında daha detaylı bilgiler elde edebilirsiniz. Mesela diziler hakkında aşağıdaki
    şekilde görüldüğü gibi bilgiler elde edilebilir.


    C# Programlama Diline Girş Step8e

    Diğer Debugger
    Araçları



    Visual Studio yukarıda
    bahsettiğimiz araçları dışında farklı araçlarda barındırır. Mesela Call Stack
    Wiever aracı ile o an hangi fonksiyonun çağrıldığı ile ilgili bilgiyi elde edebilirsiniz.
    Bellekteki değerleri ve bir prosesteki thread 'leri de aynı anda görebileceğimiz
    araçlar mevcuttur.
    C# Programlama Diline Girş Step8f
    Son Söz &
    Sonuç



    C# Programlama Diline Girş Vsnet Bu yazının amacı sizlere
    Visual Studio ile nasıl basit bir uygulamanın yapılacağını adım adım göstermekti.
    Diğer .NET ve C# kaynaklarını araştırmak için sizi cesaretlendirebildiysek ne
    mutlu bize. Bu yazıyı buraya kadar okuduğunuza göre en azından şu aşamada çalışan
    bir projeniz var, istediğiniz gibi üzerinde değişiklikler yapıp sonucu görebilirsiniz.

      Forum Saati Salı Mayıs 07, 2024 8:37 pm