Reklam
    Reklam
    Haberler

    C# Dersleri – Bölüm 3

    Bir önceki derste Not Defteri ile kısa bir C#
    programı hazırlayıp “ilk.cs” adıyla kaydetmiştik. Devamında bu CS uzantılı C#
    programını derleyip EXE dosya hazırlamıştık. Hatta örneğimizin son hali
    beklediğimiz sonucu vermemişti. Bu dersimizde ilk olarak o derste yaptığımız
    örneği düzelteceğiz. Bir önceki dersimizde hazırladığımız örneğin son şeklini
    aşağıda verdim.

     

    class Deneme

    Reklam
    Reklam

     {

       static void Main(string[] args)

        {

    Reklam
    Reklam

           int yil;

           System.Console.Write("Hangi Yıldayız : ");

           yil = System.Console.Read();

    Reklam
    Reklam

           System.Console.WriteLine();

           System.Console.Write("Girdiğiniz Yıl :");

           System.Console.WriteLine(yil);

    Reklam
    Reklam

        }

     }      

     

    Bu koda dikkat ederseniz konsoldan bilgi okuma
    işlemi Read() metodu ile yapılmaktadır. Read() metodu konsoldan okuma
    yaparken girilen bilginin ilk karakterinin ASCII kodunu geriye göndermektedir.
    Bu örnek program çalıştırılıp “Hangi Yıldayız :” sorusuna “A” ile cevap
    verilirse ekrana 65 yazılır. Çünkü “A” hafinin ASCII kodu 65’dir.

     

    Console
    sınıfının ReadLine() metodu ise farklı
    bir şekilde çalışmaktadır ve konsoldan yani DOS penceresinden okuduğu bilginin
    String tipte olduğunu varsaymaktadır. Bu nedenle yukarıda verdiğimde
    örnekte değişiklik yapıp okuma işlemini Read() yerine ReadLine() metodu ile
    yapmaya çalıştım.

     

    class Deneme

     {

       static void Main(string[] args)

        {

           int yil;

           System.Console.Write("Hangi Yıldayız : ");

           yil = System.Console.ReadLine();

           System.Console.Write("Girdiğiniz Yıl :");

           System.Console.WriteLine(yil);

        }


     }
      
        

     

    Bu şekilde değiştirdiğimiz C# programını
    derlemeye çalışırsak hata meydana gelir. Çünkü ReadLine() metodu tarafından
    okunup geriye gönderilen bilgi String tipte olmasına rağmen burada int
    tipindeki değişkene aktarmaya çalışıyorum. Bu hatanın önüne geçmek için “yil”
    adını verdiğim değişken yerine string tipte bir değişken tanımlayıp kullandım.

     

    class Deneme

     {

       static void Main(string[] args)

        {

           string str;

           System.Console.Write("Hangi Yıldayız : ");

           str = System.Console.ReadLine();

           System.Console.Write("Girdiğiniz Yıl :");

           System.Console.WriteLine(str);

        }


     }      

     

    Bu hali ile programımız istediğimiz sonucu
    verir. Bu örnekte konsoldan girilen “yıl” bilgisi matematiksel işlemlerde
    kullanılmadığı için rakamlardan meydana gelse bile string yani karaktersel bilgi
    olarak değerlendirmenin bir sakıncası olmaz.

     
    Şimdi bu örnekte değişiklik yapıp kullanıcıdan iki sayısal bilgi isteyip bunları birbirleri ile çarptıktan sonra sonucu ekrana
    yani konsola yazacağım. Bu amaçla önce iki string değişken tanımlayıp
    ReadLine() metodu ile okunan bilgileri bu değişkenlere aktardım.

     

    Bu program bu hali ile kaydedilip
    çalıştırılırsa konsoldan girilen bilgiler string değişkenlere aktarılır. Bu
    örnekteki amacımız kullanıcının sayısal bilgi girmesini ve bu sayıları birbiri
    ile çarpıp ekrana getirmek olduğu için matematiksel işlem öncesi String
    değişkenlerin içeriğini int tipindeki değişkenlere aktarmak gerekir. Bu amaçla
    bu C# programına ekleme yapıp int tipinde iki değişken tanımladım. Ardından string
    değişkenlerin içeriklerini dönüştürüp int tipindeki bu değişkenlere aktardım.

     

    class Deneme

     {

       static void Main(string[] args)

        {

          string str1;

          string str2;

          int sayi1;

          int sayi2;

          System.Console.Write("İlk sayıyı girin   : ");

          str1 = System.Console.ReadLine();

          System.Console.Write("İkinci sayıyı girin:
    ");                     

          str2 = System.Console.ReadLine();

          sayi1 = System.Int16.Parse(str1);

          sayi2 = System.Int16.Parse(str2);

        }


     }  
        

     

    Bu kodda sizin için yeni olan System adlı
    Namespace’de yer alan Int16 sınıfıdır. String bilgiyi int tipindeki
    değişkene aktarırken bu sınıfın Parse() metodunu kullandım. Bu dönüştürme
    işlemini yaparken Int16 yerine Int32 sınıfının Parse() metodunu
    kullanabilirdim.

     

    Hemen hatırlatmada bulunmak isterim: Her ne
    kadar bu örnekte kullanıcıya sayı girin mesajı verilmiş olunsa bile kullanıcı
    sayısal bilgi yerine karaktersel bilgi girerse Parse() metodu dönüştürme yapamayacağı için
    hata meydana gelir. Bu tip muhtemel hataların önene geçmek için hata kontrol
    blokları hazırlanır.

     
    Bu şekilde konsoldan girilen bilgileri
    Parse() metodu ile dönüştürüp int tipindeki değişkenlere aktardıktan sonra
    matematiksel işlem yapabiliriz. Matematiksel işlem sonucu bulunacak değeri
    aktarmak üzere int tipinde
    3. bir
    değişken tanımladım.

     

    Bu kodu dikkatice incelerseniz bir satırda
    aynı tipte birden fazla değişkeni tanımlamış olduğumuzu görürsünüz. Hemen
    hatırlatmak gerekirse; bu programı derleyip çalıştırıp sonra 1. sayı ile 2.
    sayının çarpımı sonucu elde edilen sayısal bilgi 2.147.483.647’den büyük olursa
    hata meydana gelir.

     

    Ayrıca string bilgileri Int16 sınıfının
    Parse() metodu ile dönüştürdüğümüz için konsoldan girilen sayılar
    32767’den büyük olmamalı. Int16 sınıfının Parse() metodu yerine Int32
    sınıfının Parse() metodunu kullansaydım 1. veya 2. sayı 2.147.483.647 gibi büyük
    bir değer olabilirdi.

     

    Çarpma işlemi sonucu bulunan değeri WriteLine()
    metodu sayesinde direk konsola yazmak mümkün olmasına rağmen amacım bazı
    konuları anlatmak olduğu için üçüncü bir string değişken tanımlayıp çarpma
    işlemi sonucu bulunan değeri dönüştürüp bu değişkene aktardım. Bu işlemi nasıl
    yaptığımı aşağıda görebilirsiniz.

     

    class Deneme

     {

       static void Main(string[] args)

        {

          string str1,str2, sonuc_str;

          int sonuc, sayi1, sayi2;

          System.Console.Write("İlk sayıyı girin   : ");

          str1 = System.Console.ReadLine();

          System.Console.Write("İkinci sayıyı girin:
    ");                     

          str2 = System.Console.ReadLine();

     

          sayi1 = System.Int32.Parse(str1);

          sayi2 = System.Int32.Parse(str2);

          sonuc = sayi1 * sayi2;

          sonuc_str = System.Convert.ToString(sonuc);

        }

     }

     

    Dikkat ederseniz burada int tipindeki
    değişkenin içeriğini string tipindeki değişkene aktarabilmek için
    Convert sınıfının ToString() metodundan yararlandım. C# ile az çok
    uğraşmış olanlar bu işlemin daha kısa bir yolunun olduğunu ileri sürebilirler.
    Bu arkadaşlar haklıdırlar; dönüştürme yaparken Convert sınıfının ToString()
    metodu yerine Object sınıfının ToString() metodunu
    kullanabilirsiniz. Object sınıfının ToString() metodunun nasıl
    kullanıldığını daha sonra anlatacağım. ToString() metodu ile integer bilgiyi
    string bilgiye dönüştürdükten sonra WriteLine() metodu ile konsola yazdım.

     

    class Deneme

     {

       static void Main(string[] args)

        {

          string str1,str2, sonuc_str;

          int sonuc, sayi1, sayi2;

          System.Console.Write("İlk sayıyı girin   : ");

          str1 = System.Console.ReadLine();

          System.Console.Write("İkinci sayıyı girin:
    ");                     

          str2 = System.Console.ReadLine();

     

          sayi1 = System.Int32.Parse(str1);

          sayi2 = System.Int32.Parse(str2);

          sonuc = sayi1 * sayi2;

          sonuc_str = System.Convert.ToString(sonuc);

          System.Console.WriteLine("Sayıların çarpımı  : " + sonuc_str);

          System.Console.Write("Devam etmek için bir tuşa basın");

          System.Console.Read();

        }


     }      

     

    Biraz da Namespace’lerden Söz Edelim

     

    Şimdi yukarıda uzun uzun anlatılan örneği bir
    tarafa bırakıp başka bir örnek hazırlayacağım. C# programlarını Visual Studio veya C# için hazırlanmış Express Edition’dan
    yararlanma yoluna henüz gitmediğimiz için CS uzantılı C# programını yine Not
    Defteri ile hazırlayacağız. Hazırladığım basit C# programını aşağıda verdim. DOS
    penceresinde derlenip DOS penceresinden bilgi alış verişi yapan C# programlarına
    konsol uygulaması adı verilmektedir.

     

    Class Sinif_1

    {

      public static void Main()

       {

          System.Console.Write("Efes Pilsen Basketbol Takımı");

          System.Console.ReadLine();

       }

    }

     

    Bu şekilde hazırlanan C# programı DOS
    ortamında derlenip çalıştırılırsa belirtilen bilgi Write() metodu
    sayesinde DOS penceresine yazılır. Bir sonraki satırda kullanılan ReadLine()
    metodu sayesinde enter tuşuna basılıncaya kadar program çalışmaya devam eder. Bu
    örnekte ReadLine() yerine Read() metodu kullanılsaydı değişen bir şey
    olmazdı.

     

    .NET Framework adı verilen sınıf kitaplığı ile
    gelen sınıfların Namespace adı verilen yapılarda saklandığını
    biliyorsunuz. C# programlarında kullanmak istediğiniz Class hangi Namespace’in
    içinde yer alıyorsa o Namespace’ı using deyimi ile programa dahil
    etmelisiniz veya yukarıda yapıldığı gibi kullanmak istediğiniz Namespace’in
    adını metodun önüne her seferinde yazmalısınız.

     

    DOS penceresi ile ilgili Console sınıfı
    System adlı Namespace’te yer aldığı için Write() metodundan önce bu
    sınıfın yer aldığı Namespace’in adını yazdım. Söz konusu Namespace’teki
    sınıfları programınızda çok kez kullanıyorsanız her seferinde Namespace’in adını
    bu şekilde yazmak yerine aşağıda yapıldığı gibi ilgili Namespace’i using
    deyimi ile koda dâhil edebilirsiniz.
    using
    deyimi ile olmayan bir namespace’i C# programınıza dahil etmek istemeniz halinde
    derleme sırasında hata meydana gelir.

     

    using System;

    Class sinif_1

    {

      public static void Main()

      {

        Console.Write("Efes Pilsen Basketbol Takımı");

        Console.ReadLine();

      }

    }

     

    C# programlarınızda .NET Framework ile gelen
    Namespace’lerdeki hazır sınıfları kullanmanın ötesinde kendi hazırladığınız
    class’ları bir Namespace’in içine koymanız gerekir. Yukarıda bunu yapmamış
    olmamıza rağmen herhangi bir hata meydana gelmedi. Çünkü programcı yazdıklarını
    bir Namespace’e yerleştirmediği zaman C# derleyicisi kendiliğinden bir Namespace
    hazırlamaktadır. Şimdi yukarıda verdiğim programdaki “Sinif_1” adını verdiğim Class’ı
    bir Namespace’e dahil edeceğim.

     

    using System;

    namespace SDN

     {

       class sinif_1

        {

          public static void Main()

           {

             Console.Write("Efes Pilsen Basketbol Takımı");

             Console.ReadLine();

           }

        }

      }

     

    Yukarıda bold yapılan paragrafı ve bu kısa C#
    kodunu; C++ veya Java gibi nesneye yönelik programlama dilleri hakkında az çok
    bilgi sahibi olan birisine gösterseniz şaşırıp “bunda önemli olan nedir veya
    üzerinde durulacak ne var ki?” diye size soru yöneltmesi yüksek ihtimaldir.
    Çünkü konuya kendi açısından bakacaktır. Bu dersleri C# veya nesneye yönelik
    programcılık konusunda yeni olanları düşünerek kaleme aldığım için yukarıda
    verdiğim kısa kod ve kalın(bold) yapılan açıklama karşısında duraklamanız normaldir.
    Bu düşünce ile aşağıda farklı renge boyanan paragrafı kaleme aldım.

     

    C# veya Visual Basic’in .NET
    uyumlu sürümü ile program yazanların kaçmakla kurtulamayacakları iki kavramdan
    birisi Class, diğeri ise Namespace’tir. Nesneye yönelik
    programcılığın temeli olan Class kavramı hakkında henüz doğru dürüst bilgi
    verilmemiş olmakla birlikte sanırım Class kavramı hakkında kafanızda beliren
    soruların üzerinde durmamayı şimdilik başarıyorsunuz Class bir yana bir de
    Namespace’ten söz edilince kafanızdaki sorular önem kazanmaya başlamış olabilir. 

     

    Birden Fazla Main() Metodu

     

    Uygulamanızda birden fazla Class varsa Main()
    metodunun hangi Class’ta olduğunun önemi yoktur. Çünkü C# derleyicisi Main()
    metodunun hangi Class’ta olduğunu arayıp buluyor. Uygulamadaki birden fazla
    sınıfta Main() metodu varsa hangisinin kullanılacağının belirtilmesi
    gerekir. Bu konuda bilgi vermek için aşağıdaki gibi bir C# programı hazırladım.

     

    using System;

    class sinif_1

     {

       public static void Main()

       {

         Console.Write("Program İlk sınıftaki Main ile başladı");

         Console.ReadLine();

       }

     }

     class sinif_2

      {

       public static void Main()

        {

         Console.Write("Program İkinci sınıftaki Main ile başladı");

         Console.ReadLine();

       }

     }

     

    Bu şekilde hazırlanan C# programı bilinen
    şekilde derlendiğinde hata meydana gelir. Derleme satırında hangi sınıftaki
    Main() metodunun kullanılmak istendiği belirtilmelidir. Bu konsol uygulaması
    aşağıdaki gibi derlenirse uygulama ilk sınıftaki Main() metodundan itibaren
    çalışmaya başlar.

     

     

    Bu örneğe biraz dikkat ederseniz Main()
    metodunun bu kez parametresiz olduğunu veya parantezin içine herhangi bir
    değişken adı yazmadığımı görürsünüz. Ayrıca bu örnekte Namespace
    hazırlamadığımı fark etmiş olmalısınız.

     

    Write ve WriteLine Metotları

    Yukarıda verdiğim örneklerde konsola yalnızca
    bir bilgi yazdım. Şimdi konunun anlaşılmasına katkı olması için 4 bilgiyi yazacağım. Bu amaçla
    aşağıda verdiğim C# programını hazırladım.

     

    using System;

    namespace SDN

     {

      class sinif_1

        {

         public static void Main()

          {

            Console.Write("Fenerbahçe");

            Console.Write("Galatasaray");

            Console.Write("Beşiktaş");

            Console.Write("Trabzonspor");

            Console.ReadLine();

          }

       }

     }

     

    Bu programda Write() metodu ile konsola
    4 bilgi arka arkaya yazılmakta ve ReadLine() metodu ile programın
    işletimi askıya alınmaktadır. Write() metodu ile konsola bilgi yazıldıktan sonra
    imleç yazma işleminin tamamlandığı yerde bekleyeceği için bu program derlenip
    çalıştırılırsa aşağıdaki gibi bir sonuç elde edilir.

     

    Bu bilgilerin ayrı satırlara yazılmasını
    sağlamak için Write() yerine WriteLine() metodunu kullanabilirsiniz.
    WriteLine() metodu kendisine parametre olarak verilen bilgiyi belirtilen
    ortama(burada konsol) yazdıktan sonra imleci bir sonraki satırın başına alır.

     

    using System;

    namespace SDN

     {

      class sinif_1

        {

         public static void Main()

          {

            Console.WriteLine("Fenerbahçe");

            Console.WriteLine("Galatasaray");

            Console.WriteLine("Beşiktaş");

            Console.WriteLine("Trabzonspor");

            Console.Read();

          }

       }

     }

     

    Write() metodu ile konsola yazılan metnin
    sonuna satır başı karakterini(“n”) ekleyerek aynı sonucu alabilirsiniz. Satır
    başı karakterinin nasıl kullanıldığını aşağıda görebilirsiniz.

     

    using System;

    namespace SDN

     {

      class sinif_1

        {

         public static void Main()

          {

             Console.Write("Fenerbahçen");

             Console.Write("Galatasaray n");

             Console.Write("Beşiktaş n");

             Console.Write("Trabzonspor n");

             Console.Read();

          }

       }

    }

     

     


    Yazan: Memik Yanık

    SDN – http://shiftdelete.net

    ×

    Yorumunuz gönderildi,
    onaylandıktan sonra yayımlanacak.

    12 Yorum

    1. SDN Okuru

      İlk dersten beri okudum. Bişey anladıysam Arap olayım 🙂 Kafama ne takılsa onu boşverin demişsiniz kaçıncı derste anlatacaksınız anlamadım açıkçası…

    2. SDN Okuru

      Devamını sabırsızlıkla bekliyoruz.

    3. SDN Okuru

      “İlk dersten beri okudum. Bişey anladıysam Arap olayım 🙂 ” demişsiniz. Anlamadığınız konuları foruma açık açık yazın. Arap ta olmayın negatif te olmayn..

    4. SDN Okuru

      Arap olan arkadas bence c# ne oldugundan haberi yok.
      Egerc# 3 derste anlasaydın burda ne işin vardı:D:D:D

    5. SDN Okuru

      Bir ata sözü, “Meyve veren ağaç taşlanır”. Ama ağaç, taşlayıcıların taşına aldırmaz yine de meyve verir. Bana bir kelime öğretenin ellerinden öperim. Dersleri takip ediyorum çok anlaşılır buluyorum. Teşekkürler.

    6. SDN Okuru

      Burada Arap olan arkadaşlar var ve çok güzel anladıklarını ifade ediyorlar.

    7. SDN Okuru

      Dersleri takip ediyorum. Dersler çok güzel şekilde anlatılmış. Teşekkürler. Başlangıç olarak javayla benzerlikleri çok. İlerki konularda da ne kadar farklı olduklarını anlayacağız umarım bu derslerle.

    8. SDN Okuru

      Allah c.c razı olsun inşallah bizlerde faydalanırız..

    9. SDN Okuru

      ilk dersten bu yana çok güzel ve akıcı 🙂 tebrikler

    10. SDN Okuru

      paylaşım için teşekkür ederim… ama kafama takılan bir şey sormak istiyorum ben Visual Studio 2008 kullanıyorum console’ a 2005 te writeline ve readline komutlarını kullanabiliyoruz 2008 de writeline ve readline komutları herhalde baska bir komut olarak giriliyor bunları öğrenebilirmiyim…

    Diğer yorumları gör (11) Yorum Yap

    Yorum Yaz

    Mobil Versiyondan Çıkış Yap