C# Temel Veri Tipleri
C#’ta temel veri tipleri: sayısal, metinsel, mantıksal, nesne tabanlı ve nullable tiplerin kullanımı.
C#’ta veriler, farklı türler altında saklanır ve her veri tipi bellekte kapladığı alanı ve uygulanabilecek işlemleri belirler. Bu yapı, programın nasıl çalışacağını doğrudan etkiler. Bu yazıda sayısal, metinsel, mantıksal, dinamik ve nullable veri tiplerini örneklerle inceleyeceğiz.
Veri tiplerini bilinçli seçmek, C# öğrenme sürecinin en önemli adımlarından biridir. Doğru tip kullanımı, performans sorunlarını azaltır, bellek yönetimini iyileştirir ve olası hataların önüne geçer. Bu nedenle temel veri tiplerini iyi kavramak, ileride geliştirilecek tüm uygulamalar için sağlam bir temel oluşturur.
Sayısal Tipler
Sayısal tipler tam sayılar ve ondalıklı sayılar için kullanılır. Finansal işlemler için decimal tercih edilmelidir.
| Tip | Açıklama | Örnek Değer | Bellek |
|---|---|---|---|
int |
Tam sayı (yaklaşık −2 milyar - +2 milyar) | 42 |
4 byte |
long |
Daha büyük tam sayılar | 100000000 |
8 byte |
short |
Küçük tam sayılar | 120 |
2 byte |
byte |
0 - 255 arası pozitif değer | 200 |
1 byte |
double |
Ondalıklı sayı (çift hassasiyet) | 3.14 |
8 byte |
float |
Ondalıklı sayı (tek hassasiyet) | 2.5f |
4 byte |
decimal |
Finansal işlemler için ondalık | 19.99m |
16 byte |
Örnek:
int yas = 25;
double pi = 3.14159;
decimal fiyat = 19.99m;
Console.WriteLine(yas);
Console.WriteLine(pi);
Console.WriteLine(fiyat);
Not: Para ile ilgili hesaplamalarda double yerine decimal kullanılması önerilir. decimal, kayan nokta kaynaklı yuvarlama hatalarını azaltarak daha doğru sonuçlar üretir.
Metinsel Tipler
Metin temsilinde char tek bir karakteri, string ise karakter dizilerini yani metinleri tutar.
| Tip | Açıklama | Örnek Değer |
|---|---|---|
char |
Tek karakter | 'A', '9', '*' |
string |
Karakter dizisi (yazı) | "Merhaba Dünya" |
Örnek:
char ilkHarf = 'M';
string mesaj = "Merhaba";
Console.WriteLine(ilkHarf); // M
Console.WriteLine(mesaj); // Merhaba
Mantıksal Tip
bool yalnızca true veya false değerini alır. Koşullarda, karşılaştırmalarda sıkça kullanılır.
| Tip | Açıklama | Örnek |
|---|---|---|
bool |
Mantıksal (doğru/yanlış) | true |
Örnek:
bool ogrenciMi = true;
bool mezunMu = false;
Console.WriteLine(ogrenciMi); // true
Console.WriteLine(mezunMu); // false
Nesne ve Dinamik Tipler
Esneklik ve genel amaçlı kullanım için object, var ve dynamic tipleri bulunur.
| Tip | Açıklama | Örnek |
|---|---|---|
object |
Tüm türlerin temel sınıfı; her türden değer alabilir | — |
var |
Tür çıkarımı (derleyici otomatik belirler) | var sayi = 10; |
dynamic |
Türü çalışma anında belirlenir; esnek ama hataya açık | dynamic x = "test"; |
Örnek:
object veri = 42; // int de olabilir
var mesaj = "Merhaba"; // derleyici string çıkarır
dynamic degisken = 5;
degisken = "Sonradan string oldu";
Console.WriteLine(veri);
Console.WriteLine(mesaj);
Console.WriteLine(degisken);
Nullable Tipler
Değer tipleri (ör. int, double, bool) varsayılan olarak null olamaz. Ancak ? ekleyerek nullable hale getirilebilir. Bu sayede “değer yok” durumunu da taşıyabilirler.
Örnek:
int? not = null;
if (not == null)
Console.WriteLine("Not girilmedi.");
else
Console.WriteLine($"Not: {not}");
Hangi Veri Tipi Ne Zaman Kullanılmalı?
- int: Sayaçlar, yaş bilgisi, adet ve benzeri tam sayılar
- double: Ölçüm değerleri ve yaklaşık hesaplamalar
- decimal: Para, fiyat ve finansal işlemler
- string: Kullanıcıdan alınan yazılar ve metinler
- bool: Koşullar, karşılaştırmalar ve kontrol yapıları
Veri Tipleri Arası Atamalar ve Tür Dönüşümleri
C#’ta farklı veri tiplerindeki değişkenler her zaman birbirine doğrudan atanamaz. Uyumlu olmayan tipler arasında atama yapılmaya çalışıldığında derleme zamanı hatası oluşur.
Hata Veren Atamalar
int sayi = 10;
string metin = sayi; // HATA
bool durum = true;
int deger = durum; // HATA
Yukarıdaki örneklerde, veri tipleri birbiriyle uyumlu olmadığı için atama işlemi başarısız olur.
Yukarıdaki görselde, Visual Studio farklı veri tipleri arasında yapılan uyumsuz atamaları anında tespit eder. Örnekte bool ve int gibi birbiriyle uyumlu olmayan türlerin doğrudan atanmaya çalışıldığı görülmektedir. Editör, bu durumu kırmızı dalgalı çizgiyle işaretler ve CS0029 gibi bir derleme zamanı hatası gösterir.
Otomatik (Implicit) Dönüşümler
int kucuk = 5;
double buyuk = kucuk; // Sorunsuz
Küçük kapasiteli sayısal tipler, daha büyük kapasiteli tiplere otomatik olarak dönüştürülebilir.
Açık (Explicit) Dönüşümler
double pi = 3.14;
int tamSayi = (int)pi; // 3
Büyük veya hassas veri kaybı ihtimali olan dönüşümler için açık tür dönüşümü gerekir.
Özet
- Sayılar:
int,double,decimalvb. - Metinler:
char,string - Mantıksal:
bool - Esnek tipler:
object,var,dynamic - Nullable:
?ile null değer alabilen tipler