Değer Tipleri ve Referans Tipleri C# Değer tipi ve referans tipi olmak üzere iki ayrı değişken yönetimi mevcuttur.
- Değer tipleri programın çalışma zamanında değerleri ile birlikte belleğin stack bölgesinde türü ve içeriği ile saklanan değişken türüdür. Esnekliği yüksektir.
- Referans tipleri ise belleğin Heap bölgesinde saklanan ancak bellekteki yerinin stack bölgesinde 4 byte olarak tanımlandığı değişken türüdür. Bu 4byte = 32 bit lik referans boyutu işletim sistemine bağlıdır. Eğer 64 Bit bir işletim sistemi kullanıyorsanız stack bölgesinde heap bölgesindeki herhangi bir değişkeni referans eden pointer değerinin boyutu 8 byte yani 64 bit olacaktır.
Değer tiplerinin aşağıdaki örnekte olduğu gibi birbirine eşitlenmesi kopyalama yöntemi ile gerçekleştiğinden birbirinden bağımsızdırlar.
int i1 = 5;
int i2 = i1;
Response.Write(i2.ToString()); // 5
dediğimizde stack bölgesindeki i1 değişkeninin içeriği yine stack bölgesinde oluşan ikinci değişkenimiz olan i2 nin içeriğine kopyalanır. Bu durumda i1 değişkeninin değerinin değişmesi i2 değişkenini etkilemez.
Değer tipleri genellikle sınırları belli olan değişken türlerini içerir. Yani Stack bölgesinde saklanan bir değişkenin bellekte kapladığı alan her daim sabittir. Ancak referans tiplerinde bu durum 32 bitlik bir OS için stack bölgesine 4 byte olarak yansırken tanımlanan değişkenin boyut sınırları bilinmediğinden heap bölgesinde ilgili değişkene ait boyut tahmin edilemez.
string y = “yasin”;
string s = “sirkecili”;
Şeklinde yapılan bir tanımlamada string değişken türü System.String sınıfından gelen bir referans tipi olduğundan belleğin stack bölgesinde iki farklı değişken için 4byte ,4byte olmak üzere iki farklı alan tanımlanır. Heap bölgesinde ise y değişkeni 10byte s değişkeni ise 18 byte yer kaplar.
Bunun ölçümünü ;
string y = "yasin";
string s = "sirkecili";
char[] bar = y.ToCharArray();
char[] bar2 = s.ToCharArray();
Response.Write(Convert.ToString((bar.Length * 16 /8)) + " byte <br>");
Response.Write(Convert.ToString((bar2.Length * 16 / 8)) + " byte");
Şeklinde yapabiliriz. Char veri tipi 16 bit yani ve bir byte 8 bittir. Bu denklem yardımıyla istediğimiz string türününün kaç byte olduğunu hesaplayabiliriz.
Aşağıdaki tabloda c# dilindeki değişkenlere ait türleri ve hangi türlerin hangi tipe ait olduğuna dair bilgi bulabilirsiniz.
|
Tip
|
Tür
|
İsim
|
Boyut(bit)
|
Açıklama
|
| Değer |
Sbyte |
Signed byte |
8 |
İşaretli byte |
| Değer |
Byte |
Unsigned Byte |
8 |
İşaretsiz byte |
| Değer |
Short |
16bit Signed Integer |
16 |
İşaretli tam sayı(16bit) |
| Değer |
ushort |
16bit UnSigned Integer |
16 |
İşaretsiz tam sayı(16bit) |
| Değer |
İnt |
32 bit signed Integer |
32 |
İşaretli tam sayı 32 bit |
| Değer |
uint |
32 bit unsigned Integer |
32 |
İşaretsiz tam sayı 32 bit |
| Değer |
Long |
64 bit signed Integer |
64 |
İşretli 64 bit tam sayı |
| Değer |
ulong |
64 bit unsigned Integer |
64 |
İşretsiz 64 bit tam sayı |
| Değer |
Float |
32 bit ondalıklı |
32 |
32 bit İşaretli ondalıklı l sayı (7 haneli) |
| Değer |
Double |
64 bit ondalıklı |
64 |
64 bitİşaretli ondalıklı sayı (15-16 haneli) |
| Değer |
Decimal |
128 bit real |
128 |
128 bit İşaretli ondalıklı sayı (virgülden sonra 28 hane duyarlı) |
| Değer |
Bool |
Boolean |
8 |
True yada false |
| Değer |
Char |
Karakter |
16 |
Unicode karakterler |
| Referans |
String |
Karakter kümesi |
Belirsiz |
Text içerikli veriler. |
| Referans |
Object |
Tür bağımsız ana nesne |
Belirsiz |
Tüm türlerin üretildiği Tür bağımsız değişkendir. |