Ana içeriğe atla

(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.
?
1
2
3
4
5
6
7
8
9
10
11
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.
?
1
2
3
4
5
6
7
8
9
10
11
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.
?
1
Console.Write("Merhaba Dünya");
Kodumuzun yeni hali asagidaki gibi olmali.
?
1
2
3
4
5
6
7
8
9
10
11
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.
?
1
2
3
4
5
6
7
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.
?
1
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.
?
1
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.
?
1
2
3
4
5
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.
?
1
2
3
4
5
6
7
8
9
10
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.
?
1
/// 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.
?
1
2
3
4
5
6
7
8
9
10
11
12
13
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.

Yorumlar

Bu blogdaki popüler yayınlar

Linux En Az Sistem Gereksinimi İsteyen Dağıtımları Değerlendirilmesi

Linux İşletim Sisteminin Dağıtımlarının En az sistem gereksinimi isteyen sürümleri, değerlendirilmesi aşağıdadır, Değerlendirilen dağıtımlar şunlardır: Ubuntu Xubuntu Lubuntu Damn Small Linux Linux Mint Fedora Opensuse Debian Rat Hat Suse Linux Suse Linux Sistem Gereksinimleri: Pentium 1-4 ya da Xeon; AMD Duron, Athlon (XP, MP ya da 64), Sempron ya da Opteron 256MB RAM 500MB boş disk alanı 800x600 yada üstü resolution Rat Hat Memory Gerekli: 4 GB of memory Önerilen: 8 GB of memory CPU Gerekli: Intel Core processor, 2.4GHz, 512K cache or equivalent Önerilen: Intel multi-core processor, 2.4GHz dual processor, 512K cache or equivalent Storage 5 GB alan temel kurulum için. 40 GB alan Channel başına. 10 GB alan Cache dizini için(/var/cache/rhn) Disk yapılandırması olarak Raid 5 tavsiye edilir. Database İlk kurulum için 12 GB alan önerilir. Client ve channel hesaplamaları ise, 250 KB alan client system başına, 500 KB alan çhannel başına, ayrıca 230 KB channel da

( C#) Ders 4 - Diziler, Çok Boyutlu Diziler, Düzenli ve Düzensiz Çok Boyutlu Diziler Nasil Kullanilir. foreach Döngüsünün Kullanimi.

C# da Diziler Diziler için ayni tipteki verilerin tutuldugu bir koleksiyon diyebiliriz. Örnegin integer verinin bir yigin seklinde tutulmasi için dizileri kullaniriz. C# da diziler referans tipinde degiskenlerdendir. C# da tanimlanan tüm diziler System.Array sinifindan türemis bir nesnedir. C# da diziler asagidaki gibi tanimlanir. ? 1 <veri tipi>[] <degisken ismi> = new <veri tipi>[<dizinin boyutu>]; 10 adet integer veri tutan bir dizinin tanim ise ? 1 int [] integerDizi = new int [10]; Bir dizinin boyutlari sabittir ve kullanilmadan önce belirlenmelidir. Dizi boyutunu belirlemek için baska bir degiskende kullanabilirsiniz. ? 1 2 int boyut = 10; int [] integerDizi = new int [boyut]; Diziyi tanimlama ve baslangiç degerlerini atama islemini ayri satirlardada yapabilirsiniz. ? 1 2 int [] integerDizi; integerDizi = new int [10]; Ayrica dizileri tanimlarken, dizi içine atmak istedigin

JavaScript ile Popup Pencereleri

Popup pencereleri bir sayfa içinde ek bir pencere açma islemidir. Popup pencereler JavaScript kullanarak açilirlar. Popup pencereler yaygin olarak reklam göstermek amaciyla kullanilir. Diger bir kullanim amaci ise yardim sayfalari tasarlamak içindir. Ihtiyaciniz dogrultusunda farkli amaçlar için kullanilabilirler. Popup pencereler; Sayfa yüklenmesinde,Sayfadan çikildiginda,Kullanici bir linki tikladiginda açilabilir. Sayfa yüklenirken veya kapatilirken bir popup açmak için body etiketi içine asagidaki kodu yazmaniz yeterlidir. Sayfa yüklenirken ? 1 <body onload= "javascript: alert(Load islemi!')" > Sayfa Kapatilirken ? 1 <body onunload= "javascript: alert('UnLoad islemi!')" Link tiklandiginda ? 1 <a href= "javascript: alert('link Tiklandi!')" >Popup Aç!</a> Popup olarak yeni bir pencere açmak istiyorsak window.open() metodunu kullaniriz. Window.open metodun