C# strongly-typed (sıkı sıkıya tipe bağlı) bir programlama dilidir. Bu, tamsayı, ondalık sayı, metin vb. gibi depolayacağı değerlerin türünü belirten bir değişkenin türünü bildirmemiz gerektiği anlamına gelir.
Aşağıdaki, farklı veri türlerinin değişkenlerini bildirir ve başlatır.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | class Program { static void Main(string[] args) { string metin = "Merhaba dünya!!"; int tamSayi = 100; float ondalikSayi = 10.2f; char karakter = 'A'; bool boolDeger = true; Console.ReadKey(); } } |
C# temel olarak veri türlerini iki türde sınıflandırır: Değer türleri ve Referans türleri.
- Değer türleri, basit türleri (int, float, bool ve char gibi), enum türlerini, yapı türlerini ve Null yapılabilir değer türlerini içerir.
- Referans türleri, sınıf türlerini, arabirim türlerini, temsilci türlerini ve dizi türlerini içerir.

C#’da Önceden Tanımlanmış Veri Türleri (C# Veri Tipleri tablosu)
C#, önceden tanımlanmış bazı değer türlerini ve başvuru türlerini içerir. Aşağıdaki tabloda önceden tanımlanmış veri türleri listelenmektedir:
Tür | Tanımı | Aralık | Son Ek |
---|---|---|---|
byte | 8-bit işaretsiz tam sayı | 0 ile 255 | |
sbyte | 8-bit işaretli tam sayı | -128 ile 127 | |
short | 16-bit işaretli tam sayı | -32,768 ile 32,767 | |
ushort | 16-bit işaretsiz tam sayı | 0 ile 65,535 | |
int | 32-bit işaretli tam sayı | -2,147,483,648 ile 2,147,483,647 | |
uint | 32-bit işaretsiz tam sayı | 0 ile 4,294,967,295 | u |
long | 64-bit işaretli tam sayı | -9,223,372,036,854,775,808 ile 9,223,372,036,854,775,807 | l |
ulong | 64-bit işaretsiz tam sayı | 0 ile 18,446,744,073,709,551,615 | ul |
float | 32-bit Tek duyarlıklı kayan nokta tipi | -3.402823e38 ile 3.402823e38 | f |
double | 64-bit çift duyarlıklı kayan nokta tipi | -1.79769313486232e308 ile 1.79769313486232e308 | d |
decimal | 128-bit mali ve parasal hesaplamalar için ondalık tür | (+ or -)1.0 x 10e-28 ile 7.9 x 10e28 | m |
char | 16-bit tek Unicode karakter | Any valid character, e.g. a,*, \x0058 (hex), or\u0058 (Unicode) | |
bool | 8-bit mantıksal true/false değer | True ile False | |
object | Diğer tüm türlerin temel türü. | ||
string | Unicode karakter dizisi | ||
DateTime | Tarih ve saati temsil eder | 0:00:00am 1/1/01 ile 11:59:59pm 12/31/9999 |
Yukarıdaki tabloda da görebileceğiniz gibi her bir veri tipi (string ve object hariç) değer aralığını içermektedir. Değer, veri tipinin izin verilen aralığının dışına çıkarsa derleyici bir hata verecektir. Örneğin, int veri türünün aralığı -2.147.483.648 ile 2.147.483.647’dir. Yani bu aralıkta olmayan bir değer atarsanız derleyici hata verecektir.
1 2 3 4 5 6 7 8 9 10 11 12 | class Program { static void Main(string[] args) { // Derleyici Hatası: Cannot implicitly convert type 'long' to 'int'. int i = 21474836470; Console.ReadKey(); } } |
Long, Float, Double ve ondalık türdeki işaretsiz tam sayıların son eki sırasıyla u,l,f,d ve m eki olmalıdır.
1 2 3 4 5 6 7 8 | uint ui = 100u; float fl = 10.2f; long l = 45755452222222l; ulong ul = 45755452222222ul; double d = 11452222.555d; decimal mon = 1000.15m; |
.NET Tpileri ile Karşılaştırma
Önceden tanımlanmış veri türleri, .NET türü (CLR sınıfı) adlarının diğer adıdır. Aşağıdaki tabloda, önceden tanımlanmış veri türleri ve ilgili .NET sınıf adı için diğer adlar listelenmektedir.
Takma Ad | .NET Tipi | Tip |
---|---|---|
byte | System.Byte | struct |
sbyte | System.SByte | struct |
int | System.Int32 | struct |
uint | System.UInt32 | struct |
short | System.Int16 | struct |
ushort | System.UInt16 | struct |
long | System.Int64 | struct |
ulong | System.UInt64 | struct |
float | System.Single | struct |
double | System.Double | struct |
char | System.Char | struct |
bool | System.Boolean | struct |
object | System.Object | Class |
string | System.String | Class |
decimal | System.Decimal | struct |
DateTime | System.DateTime | struct |
Bu, ister int ister Int32 değişkeni tanımlayın, her ikisinin de aynı olduğu anlamına gelir.
1 2 3 4 5 6 7 8 9 10 11 12 | class Program { static void Main(string[] args) { int a = 345; Int32 b = 345;// ikisinde de int tanımlanır Console.ReadKey(); } } |
Varsayılan değerler
Her veri türünün varsayılan bir değeri vardır. int tür 0, boolean false ve char varsayılan değer olarak ‘\0’ değerine sahiptir. Veri türünün varsayılan değerini veya C# 7.1’i atamak için default(typename) öğesini kullanır, varsayılan değişmez değeri kullanır.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | int a1 = default(int); // 0 float b1 = default(float);// 0 decimal c1 = default(decimal);// 0 bool d1 = default(bool);// false char e1 = default(char);// '\0' // C# 7.1 sonrası int a2 = default; // 0 float b2 = default;// 0 decimal c2 = default;// 0 bool d2 = default;// false char e2 = default;// '\0' |
Tür Dönüşümleri
Belirli veri türlerinin değerleri, C#’ta otomatik olarak farklı veri türlerine dönüştürülür. Buna örtük dönüştürme denir.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | class Program { static void Main(string[] args) { int i = 345; float f = i; Console.WriteLine(f); //Çıktı: 345 Console.ReadKey(); } } |
Yukarıdaki örnekte, bir i tamsayı değişkeninin değeri, bu dönüştürme işlemi C#’da önceden tanımlandığından, kayan nokta tipi f değişkenine atanmıştır.
Aşağıdaki, örtük bir veri türü dönüştürme tablosudur.
Örtülü Dönüştürme(Bu tipten) | Bu tiplere |
---|---|
sbyte | short, int, long, float, double, decimal |
byte | short, ushort, int, uint, long, ulong, float, double, decimal |
short | int, long, float, double, or decimal |
ushort | int, uint, long, ulong, float, double, or decimal |
int | long, float, double, or decimal. |
uint | long, ulong, float, double, or decimal |
long | float, double, or decimal |
ulong | float, double, or decimal |
char | ushort, int, uint, long, ulong, float, double, or decimal |
float | Double |
int, uint, long veya ulong’dan float’a ve long veya ulong’dan double’a dönüştürmeler hassasiyet kaybına neden olabilir. Hiçbir veri türü örtük olarak char türüne dönüştürülmemiştir.
Ancak, tüm veri türleri örtük olarak diğer veri türlerine dönüştürülmez. Örneğin, int türü örtük olarak uint’e dönüştürülemez. Aşağıda gösterildiği gibi açıkça belirtilmelidir.
1 2 3 4 5 6 7 8 9 10 11 12 13 | class Program { static void Main(string[] args) { int i = 100; uint u = (uint)i; Console.Write(i); Console.ReadKey(); } } |
Yukarıdaki örnekte, i tamsayısı, parantez içinde (uint) uint belirtilerek açıkça uint’e dönüştürülür. Bu, bir tamsayıyı uint’e dönüştürecektir.