C# veri tipleri (data type), bellekteki (memory) depolanma alanlarına göre Değer tipler (value type) ve Referans tipler (reference type) olmak üzere iki gruba ayrılırlar.
C# Değer Tip (Value Type) Nedir?
Bulunduğu bellek alanı içerisinde verinin değerini tutan yapılar Değer Tipli (Value Type) yapılardır. Kısacası değişkenin değerinin kendi üzerinde taşıdığı yapılardır.
Değer Tip (Value Type), belleğin Stack alanında saklanırlar.
Tüm Değer Tipleri (Value Type) System.ValueType’tan türemiştir ve bu türler de System.Object’ten türetilmiştir.
C# Değer Tip’li (Value Type) Yapılar Nelerdir?
Aşağıdaki veri tiplerin tümü değer tiplidir (value type):
- bool
- byte
- char
- decimal
- double
- enum
- float
- int
- long
- sbyte
- short
- struct
- uint
- ulong
- ushort
C# Değer Tip (Value Type) Örnek
Örneğin, int i = 100 tamsayı değişkenini ele alalım; Sistem, i değişkeni için ayrılan bellek alanında 100 değerini direk olarak kendi üzerinde saklar. Aşağıdaki resim, ‘i’ için bellekte (0x239110) varsayımsal bir konumda 100’ün nasıl depolandığını göstermektedir:
C# Referans Tip (Reference Type) Nedir?
Değer tiplerinden (Value Type) farklı olarak, bir referans tipi (reference type), değerini doğrudan üzerinde saklamaz.
Bunun yerine, değerin saklandığı adresi saklar. Kısacası, bir referans tipi, değişkenin değerinin tutulduğu belleğin adresini saklar. Bu adrese C# da pointer (işaretçi) denir.
Referans Tip (Reference Type), değeri belleğin Heap alanında saklanır.
C# Referans Tip’li (Reference Type) Yapılar Nelerdir?
Aşağıdaki referans tiplerin tümü referans tiplidir (reference type):
- class
- interface
- delegate
- record
- dynamic
- object
- string
- array (Öğe tipi değer tipi olsa bile)
C# Referans Tip (Reference Type) Örnek
Örneğin, aşağıdaki string değişkenini göz önünde bulunduralım:
string s = “Hello World!!”;
Aşağıdaki görüntü, sistemin yukarıdaki string değişkeni için belleği nasıl çalıştığını gösterir.
Yukarıdaki görselde de görebileceğiniz gibi sistem s değişkeni için bellekte rastgele bir yer (0x803200) seçiyor. s değişkeninin değeri, gerçek veri değerinin bellek adresi olan 0x600000’dir. Böylece referans tipi, değerin kendisi yerine gerçek değerin saklandığı yerin adresini saklar.
C# Veri Tiplerinin (Referans ve Değer) Default Değerleri
Type | Default value |
---|---|
Referans Tip (Reference Type) | null |
Tamsayı Tip (Integral numeric type) | 0 (zero) |
Ondalık Sayı Tip (Floating-point numeric type) | 0 (zero) |
bool | false |
char | '\0' (U+0000) |
enum | (E)0 ifadesi tarafından üretilen değer; burada E, numaralandırma tanımlayıcısıdır. |
struct | Tüm değer türü alanları varsayılan değerlerine ve tüm referans türü alanları boş değerine ayarlanarak üretilen değer. |