C# dilinde temel olarak veri tipleri ikiye ayrılırlar. Bunlar; önceden tanımlanmış veri türleri ve kullanıcı tarafından tanımlanmış veri türleridir. Önceden tanımlanmış veri türleri de kendi arasında referans tipi ve değer tipi olmak üzere ikiye ayrılır.
Değişkenler
Değişkenler, içinde farklı türlerde veri saklayabileceğimiz bellek alanlarının programlamadaki karşılığıdır. Tüm programlama dillerinde değişkenler kullanılmadan önce tanımlanmalıdır. Verilerin bellekte tutulması aşağıdaki bölgelerden birinde olmaktadır.
1. Stack Bölgesi
Stack bölgesi RAM'i temsil eder. Genel olarak önceden tanımlanmış veri tiplerinin çoğu burada tutulur. Stack bölgesine Stack Pointer ile doğrudan erişilebilir. Stack pointer o anda bellekte çalışan bölgenin adresini tutan yapıdır. Stack pointer, bellekteki alan tahsisatına göre bir azaltılır ya da bir arttırılır. Bu yüzden stack bölgesinde tutulacak olan verinin kapladığı alanın önceden bilinmesi zorunludur.
2. Heap Bölgesi
Bu bölge de RAM'de bulunan hafıza alanıdır. C#'daki bütün nesneler burada oluşturulur. Bu bölgede tahsisatı yapılacak nesnenin önceden tanımlanmış olması gerekmemektedir. Heap bölgesinde tanımlanan veriler dinamik olarak oluşturulduğu için programlarda çok büyük esneklik avantajı sağlar. Ancak bu avantajının yanı sıra Stack bölgesine göre işlem hızı daha yavaştır.
3. Static Bölge
Bellekteki herhangi bir sabit bölgeyi temsil eder. Bu alanda saklanan veriler program çalışma süresince tutulur.
4. Sabit Bölge
Sabit değerler genelde programın içerisinde gömülü şekildedirler. Bu tip değerlerin değişmesi mümkün değildir. Sadece okuma amaçlı oldukları için bazı durumlarda ROM'da saklanabilmektedir.
5. RAM Olmayan Bölge
Bellek bölgesi olmayan diğer tüm bölgeleri temsil eder. Sabit disk, CD, DVD, Flash Disk vs.
Değişken Tanımlama
C#'da tüm nesneler aşağıdaki şekilde tanımlanırlar.
Örneğin 32 Bitlik işaretsiz tamsayı türü olan "uint" tipinde, "x" adında bir değişken tanımlamak istersek:
yazabiliriz. Ancak tanımlanan değişkende herhangi bir değer tutulmamaktadır. Bu yüzden C# bize bu şekilde tanımladığımız bir değişkeni kullanmamıza izin vermez. Değişkenlere değer atama iki şekilde yapılır.
1. Değişken tanımlanırken değerinin de bildirildiği durum
Eğer bir satırda birden fazla değişken tanımlamak istersek aralarına virgül koyarak işlemi gerçekleştirebiliriz.
1. Değişken isimlerinde büyük küçük harf duyarlılığı vardır. "tbt" ile "TBT" C# için farklıdır.
yazıp programımızı derlediğimizde ekrana iki farklı değer yazdığını görebiliriz.
2. Değişken isimleri numaralar ile başlayamaz ve içerisinde boşluk bulunduramaz. Değişken ismi harf ile başlamalıdır ancak ondan sonra gelen karakter numara olabilir. Örneğin
Değişkenlerin Faaliyet Alanı
C#'da programlar açılan kapanan parantezler içerisine yazılır. Bu açılan kapanan parantezlere blok adı verilir. Bir değişkene, sadece tanımlandığı blok içerisinden erişilebilir. Örnek üstünde açıklamak gerekirse :
Birinci blok içerisinde tanımlanan a değişkenine hem ikinci bloktan hem de üçüncü bloktan erişebiliriz. Aynı şekilde ikinci ve üçüncü blokların içerisinde a adında bir değişken tanımlamak hataya sebep olacaktır. Ancak burada bir farklılık var. İkinci blok ve üçüncü blok içerisinde yer alan b adlı değişkenler isimlerinin aynı olmasına karşın hata vermezler. Çünkü ikinci ve üçüncü bloklar birbirlerini kapsamadıkları için ikinci bloktaki ve üçüncü bloktaki b değişkenleri hafızanın farklı bölgelerinde saklanırlar. Birinci bloktan b değişkenine erişmek de mümkün değildir.
Sabit İfadeler
Bir program boyunca değerinin değişmeyeceğini düşündüğümüz verileri tanımlarken "const" anahtar sözcüğü kullanarak tanımlarız. "const" olarak tanımlanan değişkenlerin en büyük avantajı programın herhangi bir yerinde değerini değiştirmeye kalktığımızda hata vermesidir. Bu sayede değişkenimizin değerinin hep sabit olduğundan emin oluruz.
şeklinde tanımlayabiliriz. Aynı şekilde sabitlere ilk değer verilirken yine sabitler kullanılmalıdır.
şeklindeki bir tanımlama da geçerlidir. Ancak sabitlerden herhangi birinin değeri değiştirilirse program hata verecektir. Örneğin:
1. Sabitler tanımlandıklarında değerleri atanmalıdır. İlk değer verilmeyen değişlenler const olamazlar.
2. Sabit ifadelere ancak sabit ifadeler ile ilk değer atanabilir.
3. Sabit ifadeler tasarım olarak zaten statik oldukları için ayrıca statik olarak belirtmek hataya yol açacaktır.
Değer Tipleri
Değer tiplerinde bir nesnenin değeri her zaman direkt saklanır. Aşağıdaki gibi bir atama yapıldığında x ve y değişkenleri birbirinden bağımsız olarak 5 değerini tutarlar. x değişkenindeki bir değişim asla y değişkenini etkilemez.
Değer tipi değişkenlerine ilk değer verilmesi iki şekilde yapılabilir.
1. İlk değer programcı tarafından atanarak:
2. İlk değer nesnenin varsayılan yapıcı işlevi çağırılarak yapılır.
Her bir tip için varsayılan bir ilk değer vardır. Bu ilk değerler aşağıdaki tabloda verilmiştir.
byte Veri Türü
byte bilgisayarda 8 bitlik bir bilgiyi saklamak için kullanılır. İşaretsiz bir veri türüdür ve sadece pozitif sayıları tutabilir. Alacağı değer 0 ile 255 aralığındadır.
sbyte Veri Türü
sbyte veri türü byte veri türü gibi 8 bitlik bir veri türüdür. Ancak işaretli bir veri türü olduğu için alabileceği değer -128 ile 127 aralığındadır.
short Veri Türü
short veri türü 16 bitlik işaretli tamsayı veri türüdür. Alabileceği değer -32,768 ile 32,767 aralığındadır.
ushort Veri Türü
ushort veri türü 16 bitlik işaretsiz tamsayı veri türüdür. Alabileceği değer 0 ile 65,535 aralığındadır.
int Veri Türü
int veri türü 32 bitlik işaretli tamsayı veri türüdür. Alabileceği değer -2,147,483,648 ile 2,147,483,647 aralığındadır.
uint Veri Türü
uint veri türü 32 bitlik işaretsiz tamsayı veri türüdür. Alabileceği değer 0 ile 4,294,967,295 aralığındadır.
long Veri Türü
long veri türü 64 bitlik işaretli tamsayı veri türüdür. Alabileceği değer -9,223,372,036,854,775,808 ile 9,223,372,036,854,775,807 aralığındadır.
ulong Veri Türü
ulong veri türü 64 bitlik işaretsiz tamsayı veri türüdür. Alacağı değer 0 ile 18,446,744,073,709,551,615 aralığındadır.
float Veri Türü
float veri türü 32 bitlik gerçek sayı veri türüdür. "f" ya da "F" son ekini alarak tanımlanırlar. Alacağı değer ± 1.5 * 10-45 ile ± 3.4 * 1038 aralığındadır.
tanımlamaları arasında hiçbir fark yoktur. "f" ya da "F" son eki konulmadığı durumda değer otomatik olarak double veri türü kabul edilir ve hata alınır.
double Veri Türü
double veri türü 64 bitlik gerçek sayı veri türüdür. "d" ya da "D son ekini alarak da tanımlanabilir. Eğer son ek yazılmazsa sistem otomatik olarak double veri türünde kabul edecektir. Alacağı değer ± 5 * 10 -324 ile ± 1.7 * 10308 aralığındadır.
tanımlamaları arasında hiçbir fark yoktur.
decimal Veri Türü
decimal veri türü 128 bitlik gerçek sayı veri türüdür. "m" ya da "M" son ekini alarak tanımlanırlar. Alacağı değer 10-28 ile 7.9 * 1028 aralığındadır.
tanımlamaları arasında hiçbir fark yoktur. "m" ya da "M" son eki konulmadığı durumda değer otomatik olarak double veri türü kabul edilir ve hata alınır.
bool Veri Türü
"true" ya da "false" değerleri saklamak için kullanılan veri türüdür. True ya da False değeri atanabileceği gibi karşılaştırma operatörlerinin oluşturduğu ifadeler de atanabilir.
char Veri Türü
char veri türü 16 bit uzunluğunda Unicode standartlarındaki karakterleri temsil etmek için kullanılır.
Referans Tipleri
C# dilinde önceden tanımlanmış iki adet referans tipi veri türü bulunur. Bunlar string ve object veri türleridir. Object veri türü C# dilindeki bütün türlerin türediği veri tipidir.
string Veri Türü
string veri türü Unicode karakterlerden oluşan bir dizi gibi düşünülebilinir.
Özel anlamlar ifade eden karakterler kullanmak istiyorsak bunları "\" karakteri ile belitmemiz gerekir ya da string ifadesinin önüne "@" işareti konulur.
şeklindeki tanımlamaların ikisi de doğrudur.
object Veri Türü
object veri türü C#'da bulunan tüm veri türlerinin türediği veri türüdür. Bu yüzden tüm değerler ve nesneler object türünden bir değişkene atanabilir. Nesnelerin object türüne dönüştürülmesine boxing denilmektedir. Tür dönüşümü konusunda daha detaylı inceleyeceğiz.
Değişkenler
Değişkenler, içinde farklı türlerde veri saklayabileceğimiz bellek alanlarının programlamadaki karşılığıdır. Tüm programlama dillerinde değişkenler kullanılmadan önce tanımlanmalıdır. Verilerin bellekte tutulması aşağıdaki bölgelerden birinde olmaktadır.
1. Stack Bölgesi
Stack bölgesi RAM'i temsil eder. Genel olarak önceden tanımlanmış veri tiplerinin çoğu burada tutulur. Stack bölgesine Stack Pointer ile doğrudan erişilebilir. Stack pointer o anda bellekte çalışan bölgenin adresini tutan yapıdır. Stack pointer, bellekteki alan tahsisatına göre bir azaltılır ya da bir arttırılır. Bu yüzden stack bölgesinde tutulacak olan verinin kapladığı alanın önceden bilinmesi zorunludur.
2. Heap Bölgesi
Bu bölge de RAM'de bulunan hafıza alanıdır. C#'daki bütün nesneler burada oluşturulur. Bu bölgede tahsisatı yapılacak nesnenin önceden tanımlanmış olması gerekmemektedir. Heap bölgesinde tanımlanan veriler dinamik olarak oluşturulduğu için programlarda çok büyük esneklik avantajı sağlar. Ancak bu avantajının yanı sıra Stack bölgesine göre işlem hızı daha yavaştır.
3. Static Bölge
Bellekteki herhangi bir sabit bölgeyi temsil eder. Bu alanda saklanan veriler program çalışma süresince tutulur.
4. Sabit Bölge
Sabit değerler genelde programın içerisinde gömülü şekildedirler. Bu tip değerlerin değişmesi mümkün değildir. Sadece okuma amaçlı oldukları için bazı durumlarda ROM'da saklanabilmektedir.
5. RAM Olmayan Bölge
Bellek bölgesi olmayan diğer tüm bölgeleri temsil eder. Sabit disk, CD, DVD, Flash Disk vs.
Değişken Tanımlama
C#'da tüm nesneler aşağıdaki şekilde tanımlanırlar.
1
| <veri türü> <isim>; |
1
| uint x; |
1. Değişken tanımlanırken değerinin de bildirildiği durum
2. Değişken tanımlamasının yapılıp değerinin sonradan bildirildiği durum
1
2
| uint x; x=50; |
float x, y, z;Değişkenlerin Adlandırılması
1. Değişken isimlerinde büyük küçük harf duyarlılığı vardır. "tbt" ile "TBT" C# için farklıdır.
1
2
3
4
5
| int tbt, TBT; tbt=10; TBT=9; Console.WriteLine(tbt); Console.WriteLine(TBT); |
2. Değişken isimleri numaralar ile başlayamaz ve içerisinde boşluk bulunduramaz. Değişken ismi harf ile başlamalıdır ancak ondan sonra gelen karakter numara olabilir. Örneğin
int tbt1; bool x5;şeklindeki tanımlamalar doğrudur.
Değişkenlerin Faaliyet Alanı
C#'da programlar açılan kapanan parantezler içerisine yazılır. Bu açılan kapanan parantezlere blok adı verilir. Bir değişkene, sadece tanımlandığı blok içerisinden erişilebilir. Örnek üstünde açıklamak gerekirse :
1
2
3
4
5
6
7
8
9
| { // Birinci Blok int a=5; { //İkinci Blok int b=3; } { // Üçüncü Blok int b=3; } } |
Sabit İfadeler
Bir program boyunca değerinin değişmeyeceğini düşündüğümüz verileri tanımlarken "const" anahtar sözcüğü kullanarak tanımlarız. "const" olarak tanımlanan değişkenlerin en büyük avantajı programın herhangi bir yerinde değerini değiştirmeye kalktığımızda hata vermesidir. Bu sayede değişkenimizin değerinin hep sabit olduğundan emin oluruz.
1
| const double e = 2.71828; |
1
2
3
| int a = 3; int b = 5; const int c = a+b; |
int a = 3; a = a + 1; int b = 5; const int c = a + b;şeklindeki bir ifade hatalıdır. Çünkü a değişkeni sabitliğini yitirmiştir. Sabit ifadeler ile ilgili uymamız gereken üç kural vardır.
1. Sabitler tanımlandıklarında değerleri atanmalıdır. İlk değer verilmeyen değişlenler const olamazlar.
2. Sabit ifadelere ancak sabit ifadeler ile ilk değer atanabilir.
3. Sabit ifadeler tasarım olarak zaten statik oldukları için ayrıca statik olarak belirtmek hataya yol açacaktır.
Değer Tipleri
Değer tiplerinde bir nesnenin değeri her zaman direkt saklanır. Aşağıdaki gibi bir atama yapıldığında x ve y değişkenleri birbirinden bağımsız olarak 5 değerini tutarlar. x değişkenindeki bir değişim asla y değişkenini etkilemez.
1
2
3
| int x = 5; int y; y= x; |
1. İlk değer programcı tarafından atanarak:
1
| int tbt = 0; |
1
| int tbt = new int (); |
Veri Tipi | Varsayılan İlk Değer |
bool | false |
byte | 0 |
char | '\0' |
decimal | 0.0m |
double | 0.0d |
enum | enum sabitindeki ilk değer |
float | 0.0f |
int | 0 |
long | 0L |
sbyte | 0 |
short | 0 |
struct | Yapı nesnesindeki bütün değerler varsayılan değere, referans tipleri ise null değere atanır |
uint | 0 |
ulong | 0 |
ushort | 0 |
byte bilgisayarda 8 bitlik bir bilgiyi saklamak için kullanılır. İşaretsiz bir veri türüdür ve sadece pozitif sayıları tutabilir. Alacağı değer 0 ile 255 aralığındadır.
sbyte Veri Türü
sbyte veri türü byte veri türü gibi 8 bitlik bir veri türüdür. Ancak işaretli bir veri türü olduğu için alabileceği değer -128 ile 127 aralığındadır.
short Veri Türü
short veri türü 16 bitlik işaretli tamsayı veri türüdür. Alabileceği değer -32,768 ile 32,767 aralığındadır.
ushort Veri Türü
ushort veri türü 16 bitlik işaretsiz tamsayı veri türüdür. Alabileceği değer 0 ile 65,535 aralığındadır.
int Veri Türü
int veri türü 32 bitlik işaretli tamsayı veri türüdür. Alabileceği değer -2,147,483,648 ile 2,147,483,647 aralığındadır.
uint Veri Türü
uint veri türü 32 bitlik işaretsiz tamsayı veri türüdür. Alabileceği değer 0 ile 4,294,967,295 aralığındadır.
long Veri Türü
long veri türü 64 bitlik işaretli tamsayı veri türüdür. Alabileceği değer -9,223,372,036,854,775,808 ile 9,223,372,036,854,775,807 aralığındadır.
ulong Veri Türü
ulong veri türü 64 bitlik işaretsiz tamsayı veri türüdür. Alacağı değer 0 ile 18,446,744,073,709,551,615 aralığındadır.
float Veri Türü
float veri türü 32 bitlik gerçek sayı veri türüdür. "f" ya da "F" son ekini alarak tanımlanırlar. Alacağı değer ± 1.5 * 10-45 ile ± 3.4 * 1038 aralığındadır.
1
2
| float x = 1.8f; float x = 1.8F; |
double Veri Türü
double veri türü 64 bitlik gerçek sayı veri türüdür. "d" ya da "D son ekini alarak da tanımlanabilir. Eğer son ek yazılmazsa sistem otomatik olarak double veri türünde kabul edecektir. Alacağı değer ± 5 * 10 -324 ile ± 1.7 * 10308 aralığındadır.
1
2
3
| double x = 1.8; double x = 1.8d; double x = 1.8D; |
decimal Veri Türü
decimal veri türü 128 bitlik gerçek sayı veri türüdür. "m" ya da "M" son ekini alarak tanımlanırlar. Alacağı değer 10-28 ile 7.9 * 1028 aralığındadır.
1
2
| decimal x = 1.8m; decimal x = 1.8M; |
bool Veri Türü
"true" ya da "false" değerleri saklamak için kullanılan veri türüdür. True ya da False değeri atanabileceği gibi karşılaştırma operatörlerinin oluşturduğu ifadeler de atanabilir.
1
2
3
| bool x = true ; bool y = false ; bool z = 3 < 5; |
char veri türü 16 bit uzunluğunda Unicode standartlarındaki karakterleri temsil etmek için kullanılır.
1
2
3
| char x = 'A' ; char y = '\x0058' ; char z = ( char )45; |
C# dilinde önceden tanımlanmış iki adet referans tipi veri türü bulunur. Bunlar string ve object veri türleridir. Object veri türü C# dilindeki bütün türlerin türediği veri tipidir.
string Veri Türü
string veri türü Unicode karakterlerden oluşan bir dizi gibi düşünülebilinir.
1
2
| string x = "tahribat.com" ; string y = "HolyOne" ; |
1
2
| string path = "c:\\windows\\" ; string path = @"c:\windows\" ; |
object Veri Türü
object veri türü C#'da bulunan tüm veri türlerinin türediği veri türüdür. Bu yüzden tüm değerler ve nesneler object türünden bir değişkene atanabilir. Nesnelerin object türüne dönüştürülmesine boxing denilmektedir. Tür dönüşümü konusunda daha detaylı inceleyeceğiz.
0 yorum:
Yorum Gönder