C# Hakkinda Temel Bilgiler
Bu dersimizde C# dili hakkinda temel bilgiler ögrenecegiz. Biraz açarsak bu dersimizde veri tipleri, degiskenler ve operatörleri nasil kullanacagimizla ilgili bilgiler verecegiz.
Temel Veri Tipleri ve CTS(Common Type System) Karsiliklari
C# da iki çesit veri tipi vardir:
- Deger Tipleri (Value type)
- Referans Tipleri(Reference Type)
Degiskenler bellekte bulunan verilerdir. Bir degiskeni kullandigimiz zaman o degiskenin bellekte bulundu yerdeki bilgiyi kullaniriz. Deger tipleri veriyi direk olarak bellek bölgesinden alirken referans tipleri baska bir nesneye referans gösterirler. Yani referans tipleri içinde veri degil adres bilgisi tutarlar. Veri tipleri stack dedigimiz bellek bölgesinde tutulurlar, referans tipleri ise heap bellek bölgesinde saklanirlar. int, double, float gibi veri tipleri deger tiplerine örnek gösterilebilir. Herhangi bir sinif türü ise referans tipine örnek gösterilebilir. Deger tipleri birbirine esitlenirken degiskenin barindirdigi deger bir diger degiskene kopyalanir. Böylece iki farkli bagimsiz degisken olusur. Referans tipleri ise esitleme sirasinda degiskenlerin tasidiklari veri degil heap bölgesinde isaret ettikleri adres kopyalanir. Böylece eger iki referans degiskeni birbirine esitledi isek ve daha sonra bunlardan birinde bulunan veriyi degistirdi ise otomatik olarak diger referans degiskeninin degeri de degisir. Çünkü adresde bulunan veri degisince bu adresi isaret eden iki degiskende yeni veri bilgisine ulasir.
Bir önceki dersimizde Common Type System hakkinda bilgi vermistik. C# da tanimlanan veri tipleri ve bunlarin CTS deki karsiliklarini tablo halinde asagida bulabilirsiniz. C# da toplam 15 veri tipi vardir bunlardan 13 ü deger tipindedir, 2 si ise referans tipindedir.
Deger Tipleri:
C# Adi | CTS Karsiligi | Açiklama | Max ve Min aralik yada degeri |
---|---|---|---|
sbyte | System.Byte | 8 bit isaretli tamsayi | -128 : 127 |
short | System.Int16 | 16 bit isaretli tamsayi | -32.768 : 32.767 |
int | System.Int32 | 32 bit isaretli tamsayi | -2.147.483.648 : 2.147.483.647 |
long | System.Int64 | 64 bit isaretli tamsayi | -9.223.372.036.854.775.808 : -9.223.372.036.854.775.807 |
byte | System.Byte | 8 bit isaretsiz tamsayi | 0,177083333 |
ushort | System.UInt16 | 16 bit isaretsiz tamsayi | 0 : 65.535 |
uint | System.UInt32 | 32 bit isaretsiz tamsayi | 0 : 4.294.967.295 |
ulong | System.UInt64 | 64 bit isaretsiz tamsayi | 0 : 18.446.744.073.709.551.615 |
float | System.Single | 32 bit tek kayan sayi | +yada - 1,5*10-45 : + ya da - 3,4*1038 |
double | Sytem.Double | 64 bit çift kayan sayi | +yada - 5*10-324 : + ya da - 1,7*10308 |
decimal | System.Decimal | 128 bit ondalikli sayi | +yada - 1,5*10-28 : + ya da - 7,9*1028 |
bool | System.Boolean | true ya da false | |
char | System.Char | Karakterleri temsil eder | 16 Unicode karakterleri |
Referans Tipleri:
C# Adi | CTS Karsiligi | Açiklama |
---|---|---|
object | System.Object | Bütün veri türlerinin türedigi kök eleman |
string | System.String | Unicode karakterlerinden olusan string |
Degiskenler:
Bir program çalistirirken tüm veriler geçici olarak hafizada tutulur. Degiskenler bu verilerin isimlendirilmesi islemidir. C# da degiskenler asagidaki yapida tanimlanirlar.
1
| <veri tipi><degisken adi>; |
Örnegin;
1
| int i; |
Yukaridaki ifade bir integer veri tipini saklamak için programin diger asamalarinda i ismi ile ifade edilecek hafizada 4 bytelik bir alan açar. Bir degiskene tanimlarken deger atayabilirsiniz, ayrica bir veri tipi altinda birden fazla isimle farkli degiskenler tanimlayabilirsiniz.
1
2
3
| bool dogruMu = false ; double yuzde = 98.32, ortalama = 35.32; char karakter = 'A' ; |
Diger modern programlama dilleri gibi C# dada degiskenleri kullanmadan önce tanimlamak zorundasiniz. Ayrica eger bir yerel degisken (Bir method içinde tanimlanan degiskenler) tanimliyorsaniz bu degiskeni kullanmadan önce bir deger atamasi yapmak zorundasiniz.
1
2
3
4
5
6
| static void Main( string [] args) { int kilo; //kilo = 78; Console.WriteLine(kilo); } |
Yukaridaki kod parçacigi kilo degiskenine deger atamadiginiz için hata verecektir çünkü kilo degiskeni yerel bir degiskendir. Eger //kilo = 78; açiklama satirindaki // isaretlerini siler ve bu satiri koda dahil ederseniz hatanin ortadan kalktigini görürsünüz. Buradan da anlasilacagi gibi C# yerel degiskenlere ilk atama islemini otomatik yapmak global degiskenler de ise ilk deger atamasi degisken tipine göre otomatik olarak yapilir. Örnegin integer bir tip için 0 gibi.
Sabit Degiskenler:
Sabit degiskenler içinde buluna veri degisken ömrü tamamlanana kadar degismez. Bir sabit tanimlamak içinconst anahtar kelimesini kullaniriz. Ilk tanimlandiklari sirada ilk deger atamasi yapmak zorundayiz, uygulamamizin herhangi bir kisminda sabit degiskenin içerigini degistiremeyiz.
1
2
| const double PI = 3.14; const double PI; |
Yukaridaki tanimlamalardan birincisi dogru ikincisi ise yanlis bir tanimlamadir. Ilk atamalari yapilmak zorundadir.
Sabitler genellikle büyük harflerle tanimlanirlar. Bu bir zorunluluk degildir.
Degiskenler ve Metotlar için Isimlendirme Konvansiyonlari
Microsoft degisken isimlendirmesi için Camel Notasyonu methotlar için ise Pascal Notasyonunu tavsiye ediyor.
Camel notasyonunda isim küçük harfle baslar, eger degisken isminde birden fazla kelime geçiyor ise isimdeki diger kelimeler büyük harfle baslar.
Camel Notasyonu:
1
2
3
| maas; maasMiktari; massMiktariAciklama; |
Pascal Notasyonunda kelime büyük harfle baslar. Camel Notasyonunda oldugu gibi diger kelimelerde büyük harfle baslar.
Pascal Notasyonu:
1
2
| Maas(); MaasHesapla(); |
Bu notasyonlarin kullanimi mecburi degildir. Fakat sürekli olarak bu tür bir notasyona uyarak kodlarinizi yazarsaniz, kodlariniz daha anlasilir bir hale girer.
C# da Operatörler
Aritmetik Operatörler
Operatör | Açiklama |
---|---|
+ | Ekleme |
- | Çikarma |
* | Çarpma |
/ | Bölme |
% | Kalan veya modül |
++ | Birer Birer Arttirma |
-- | Birer Birer Eksiltme |
Yukaridaki tablodaki operatörlerin kullanimi ile ilgili örnek kod asagidadir. Ayrica kodu buradan indirerek kendiniz deneyebilirsiniz.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
| public static void Main() { int toplam = 0, fark = 0, carpim = 0, kalan = 0; float bolum = 0; int sayi1 = 0, sayi2 = 0; Console.WriteLine( "Sayi Biri Giriniz : " ); sayi1 = Convert.ToInt32(Console.ReadLine()); Console.WriteLine( "Sayi Ikiyi Giriniz : " ); sayi2 = Convert.ToInt32(Console.ReadLine()); toplam = sayi1 + sayi2; fark = sayi1 - sayi2; carpim = sayi1 * sayi2; kalan = sayi1 % sayi2; bolum = sayi1 / sayi2; Console.WriteLine( "Girilen Sayilar: Sayi 1 = {0}, Sayi 2 = {1}" , sayi1, sayi2); Console.WriteLine( "Sayilarin Toplami = {0}" , toplam); Console.WriteLine( "Sayilarin Farki (sayi1 - sayi2) = {0}" , fark); Console.WriteLine( "Sayilarin Çarpimi = {0}" , carpim); Console.WriteLine( "Sayilarin kalan (sayi1 in sayi2 ye bölümgnden kalan)= {0}" , kalan); Console.WriteLine( "Sayilarin Bölümünden (sayi1 / sayi2) Bölüm = {0}" , bolum); sayi1++; sayi2--; Console.WriteLine( "Sayi 1 in bir fazlasi = {0}" , sayi1); Console.WriteLine( "Sayi 2 in bir eksigi = {0}" , sayi2); } |
Yukaridaki kodu inceleyecek olursaniz. Console.WriteLine("Açiklama Metni {0}" , sayi1); gibi bir yapi görürsünüz. String ifadelerde stringIfade1 + stringIfade2 seklinde birlestirme yapmak yerine bu formatta stringleri birlestirebilirsiniz. {0} seklindeki ifade virgülden sonra yazilan ilk degiskenin degerini buraya yaz demek oluyor. Eger ikinci bir degisken varsa {1} seklinde yazarak onunda degerini baska bir kisma yerlestirebiliriz. Dikkat etmeniz gereken {} ifadesinin içindeki sayilar sirasi ile gitmeli. Yani 0, 1, 2,..
1
| sayi1++ ifadesi |
ile
1
| sayi1 = sayi1 + 1; |
ayni anlama gelmektedir. Ayrica bir sayiya herhangi bir sayi eklemek istiyorsak örnegin sayi1 e 5 ekleyelim.
1
| sayi1 = sayi1 +5 |
yazmak yerine;
1
| sayi += 5; |
daha kisa ve dogrudur.
Ön Ek ve Arka Ek Olarak Kullanma
++ ve – operatörleri en ve arka ek olarak kullanilabilir. Örneklerle anlatacak olursak;
1
2
3
| sayi2 = 3; sayi1 = ++sayi2; //sayi1 = 4, sayi2= 4 olur. sayi1 = --sayi2; //sayi1 = 2, sayi2= 2 olur. |
Örnekte görüldügü gibi eger operator ön ek olarak kullanilirsa derleyici önce operatörün görevini yapar daha sonra ise atama islemini gerçeklestirir. Böylece sayi1 = ++sayi2 ifadesinde sayi2 önce bir arttirilir daha sonra sayi1’e sayi2 nin degeri atanir.
1
2
3
| sayi2 = 3; sayi1 = sayi2++; //sayi1 = 3, sayi2= 4 olur. sayi1 = sayi2--; //sayi1 = 3, sayi2= 2 olur. |
Operatör arka ek olarak kullanildiginda ise önce atama islemi yapilar daha sonra operatörün görevi yerine getirilir. sayi1 = sayi2++ isleminde önce sayi2 nin degeri sayi1’e atanir, daha sonra sayi2 bir arttirilir.
Atama Operatörleri
Atama Operatörleri degiskenlere deger atamak için kullanilirlar.
Operatör | Açiklama |
---|---|
= | Basit esitleme |
+= | Sagdaki Sayi ile topla sonra toplami esitle |
-= | Sagdaki Sayi yi çikar sonra sonucu esitle |
*= | Sagdaki Sayi ile çarp sonra toplami esitle |
/= | Sagdaki Sayi ile böl sonra bölümü esitle |
%= | Sagdaki Sayi ile bölümünden kalani bul sonra kalani esitle |
Iliskisel(Karsilastirma) Operatörleri
Iliskisel Operatörler genelde kosul ifadelerinde karsilastirma için kullanilirlar. C#da kullanilan iliskisel operatörler asagidakilerdir.
Operatör | Açiklama |
== | Esittir |
!= | Esit Degildir |
> | Büyüktür |
< | Küçüktür |
>= | Büyük Esittir |
<= | Küçük Esittir |
Iliskisel Operatörler her zaman true veya false olmak üzere boolean bir deger döndürürler. Örnekle anlatmamiz gerekirse;
1
2
3
4
5
6
7
| int sayi1 = 6, sayi2 = 4; sayi1 == sayi2 //false; sayi1 != sayi2 //true; sayi1 > sayi2 //true; sayi1 < sayi2 //false; sayi1 >= sayi2 //true; sayi1 <= sayi2 //false; |
Iliskisel operatörler sadece birbiri ile uyumlu tipteki degiskenleri karsilastirabilir. Bir boolean tipi ile integer tipindeki iki degiskeni karsilastiramazsiniz.
Mantiksal ve Bit Düzeyinde (Logical and Bitwise) Opeatörleri
Bu operatörler mantiksal islemleri ve bit düzeyindeki islemleri yapmak için kullanilirlar.
Operatör | Açiklama |
---|---|
& | Bit bazinda ve islemi |
| | Bit bazinda or islemi |
^ | Bit bazinda xor islemi |
! | Bit bazinda not islemi |
&& | Mantiksal ve islemi |
|| | Mantiksal or islemi |
Bit bazindaki operatörler degiskene ait degeri bit bazinda isleme tabi tutarlar. Mantiksal operatörler ise bildigimiz mantik kavrami kapsaminda bu ve su dogrumu veya bu veya su dogrumu gibi karsilastirma yaparlar.
1
| bool sonuc = (i > 3 && j < 5) || (i < 7 && j > 3); |
Mantiksal operatörlerde;
1
2
3
4
5
6
7
8
| Dogru ve Dogru = Dogru; Dogru ve Yanlis = Yanlis; Yanlis ve Dogru = Yanlis; Yanlis ve Yanlis = Yanlis; Dogru veya Dogru = Dogru; Dogru veya Yanlis = Dogru; Yanlis veya Dogru = Dogru; Yanlis veya Yanlis = Yanlis; |
Mantiksal And islemlerinde eger kosullardan herhangi biri yanlis ise and islemine tabi tutulan diger kosullar true olsa bile sonuç falsedur. Or isleminde ise kosullardan herhangi birinin true olmasi diger kosullarin ne olduguna bakmaksizin sonucun true olmasini saglar.
C# Mantiksal operatörler Kisa Devre mantigiyla çalisir. Mantiksal islemlerde kosullar soldan saga dogru kontrol edilir. Yukaridaki paragraftaki bilgiye göre; bir and islemi kontrol ediliyorsa ve kosullardan birisi false ise sagda kaç adet daha and kosulu olmasina bakmaksizin sonucu false olarak belirleyebiliriz. C# derleyicisi de bu yöntemi kullanarak and isleminde ilk false gördügü anda or isleminde ise ilk true gördügü anda islemi keser ve sonucu döndürür. Bu büyük uygulamalarda çok fazla kosul oldugu zamanlar uygulamamizin daha hizli çalismasini saglar.
C# da Kullanilan Diger Operatörler
Operatör | Açiklama |
---|---|
>> | Bit bazinda saga kaydirma |
<< | Bit bazinda sola kaydirma |
, | Nesnelerin özelliklerine ulasmak için |
[] | Indeks numarasi ile dizi ve kolleksiyonlarin elemanlarina ulasmak |
() | Çevrim Operatörü. Tip çevrimleri için kullanilir. |
?: | Kosul Operatörü. if else kosulunun kisa yazimi. Ilerde anlatilacak |
Operatörlerde Çalisma Önceligi
Tüm operatörlerin çalisma önceligi ayni degildir. Matematik kurallarinda geçerli olan çarpma, bölme, çikarma toplama islemlerindeki öncelik sirasi operatörler içinde geçerlidir. Öncelikleri belirlemek için islemleri parantez içinde yazmamiz gerekir. Örnegin
1
2
3
4
5
| int i = 3 + 2 * 6; // önce 2 ile 6 çarpilir daha sonra çarpima 3 eklenerek 15 bulunur. int j = (3 + 2) * 6; // önce 3 ile 2 toplanir daha sonra toplam 6 ile çarpilarak 30 bulunur. |
Yorumlar
Yorum Gönder