|
C# Dilindeki Temel Veri Türleri |
|
Gönderiliyor lütfen bekleyin... |
|
|
Her dilde olduğu gibi C# dilinde de önceden tanımlanmış ve dillerin temelini
oluşturan veri saklamak için kullanılan bir takım veri tipleri vardır. Bu makalemizde
C# dilinde kullanılan veri türlerine değineceğiz. C# dilinde temel olarak veri
tipleri ikiye ayrılır, 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(reference types) ve değer tipi(value type) olmak
üzere ikiye ayrılır. Bu detaylı bilgileri vermeden önce veri tipleri nasıl tanımlanır,
veri türlerine nasıl ilk değer verilir ve veri türlerinin faaliyet alanı gibi
temel konulardan bahsetmek istiyorum.
Değişken Kavramı
Değişkenler
bir programlama dilinde temel verileri saklamak ve bu verileri sonradan kullanmak
için kullanılan bellek bölgeleridir. C# dilinde genel olarak bir değişken tanımlaması
aşağıdaki gibi olmaktadır.
Örneğin
C# dilinde işaretsiz ve 32 bitlik veriyi temsil eden "a" isimli bir
değişken aşağıdaki gibi tanımlanır.
Fakat
yukarıdaki tanımlamada bir sorun var. "a" adlı değişkende herhangi bir değer
tutulmaktadır.Bu yüzden C# derleyicisi şimdilik "a" değişkenini kullanmamıza
müsade etmez, çünkü "a" da neyin olduğu henüz belli değildir.Bu yüzden değişkenlere
=(eşittir) operatörüyle ilk değerler atarız, ya da değişken tanımlamasından
sonra, değişkene bir değer atarız. Bir değişkene bir değer atamak için iki farklı
yöntem kullanılır. Aşağıda bu iki yönteme ait örnek bulunmaktadır.
int a =
10 ; //değişken tanımlanırken bellekteki değer 10 olarak düzenleniyor.
--------------------
int b;
b = 10 ; /*değişken tanımlandıktan sonra değişkene değer atanıyor.İşlevsel
olarak bu iki kullanım açısından bir fark yoktur.*/
--------------------
int a=10, b;
b = 10 ; /*eğer bir satırda birden fazla değişeken tanımlaması yapmak
istiyorsak bu yapıyı kulanırız.Bu durumda a ve b int türden değişkenlerdir
denir.*/
|
Önemli
Not:
C# dilinde bir değişkene herhangi bir değer atamadan onu kullanmak yasaktır.
Yani derleme işlemi gerçekleşmez, örneğin aşağıdaki gibi bir kullanım derleme
zamanında hata verecektir. Bu yüzden eğer bir değişkeni kullanmak istiyorsak
yukarıda açıkladığımız gibi değişkenlere bir değer vermek zorundayız. Bu kural
önceden tanımlanmış referans tipleri için de değer tipleri için de geçerlidir.
int
a ;
Console.WriteLine(a); //Bu ifadeleri içeren bir kod derlenemez.
|
Değişkenlerin Faaliyet Alanları (Scope)
C#
dilinde programın genel akışı açılan ve kapanan parantezler içerisinde yazılır.
Bu açılan ve kapanan parantezler arasındaki bölgeye blok denir. Tanımlanan bir
değişkene, ancak tanımlandığı blok içerisinde ulaşılabilir. Örneğin aşağıdaki
kısa örnekte tanımlanan örnekte her iki "a" değişkeni birbirinden
bağımsızdır ve bellekte ayrı bölgelerde saklanırlar.
public
class deneme
{ public static void Main() { { //Birinci blok int a=20 ; } {//İkinci blok int a=20 ; } }
}
|
Yukarıdaki
örnekte birinci ve ikinci blokta tanımlanan "a" isimli değişkenler Main bloğu
içinde geçersizdir. Birinci a değişkeninin faaliyet alanı 1.Blok ,ikinci a değişkenin
faaliyet alanı ise 2. Bloktur. Bu durumda Main() bloğunda Console.WriteLine(a);
gibi bir ifade hatalıdır, çünkü Main bloğu içinde tanımlanan bir a değişkeni
yoktur. Unutmamalıyız ki daha sonraki makalelerde detaylı olarak göreceğimiz
for ve diğer döngüler de birer blok olduğu için bu bloklarda tanımlanan değişkenler
döngü bloğunun dışında geçersiz olacaktır. Diğer bir önemli nokta ise faaliyet
alanı devam eden bir değişkenin bir daha tanımlanmasının hataya yol açmasıdır.
Örneğin aşağıdaki gibi bir durum derleme zamanında hata verecektir. Çünkü bir
değişkenin faaliyet alanı bitmeden aynı isimli değişken tekrar tanımlanıyor.
public
class C#nedir?com
{ public static void Main() { int a; { int a=20 ; } }
}
|
Gördüğünüz
gibi Main bloğunda tanımlanan a değişkeninin faaliyet alanı açılan blokta devam
etmektedir.Bu yüzden yukarıdaki gibi ifadeler geçersidir.Üst seviyede açılan
bloklar alt seviyedeki blokları kapsadığı için, birinci tanımlanan a değişkeni
sonradan açılan blok içinde hala geçerlidir.
Yukarıda anlatılan duruma ters düşüyor gibi görünse de aşağıdaki gibi bir kullanım
son derece legal bir durumdur. Bu konuyu daha sonraki makalelerimizde detaylı
bir şekilde inceleyeceğiz.
public
class C#nedir?com
{
static int a = 10;
public static void Main()
{
int a;
{
int a = 10 ;
}
}
}
|
Bu
konu sınıflarla ilgili bir konu olduğu için detaylarına girmeyeceğiz ama şimdilik
böyle bir kullanımın geçerli olduğunu bilmenizde fayda var.
Sabitler
Bir
program boyunca değerinin değişmeyeceğini düşündüğümüz verileri sabit veriler
olarak tanımlarız. Sabit veriler tanımlamak için tanımlama satırında const
anahtar sözcüğünü kullanırız. const olarak
tanımlanmış değişkenlerin en büyük avantajı program içinde sıkça kullandığımız
değerleri aniden değiştirmek gerektiğinde görülür.Mesela matematiksel işlemler
yapan bir programda pi sayısını const olarak tanımlayıp istediğimiz zaman pi
sayısını değiştirebiliriz. Tabi bu işlemi const değilde normal bir değişkenle
de yapabilirdik, ama şu da bir gerçek ki çok uzun programlarda sabit olmasını
istediğimiz değişkeni yanlışlıkla değiştirebiliriz. Fakat const olarak tanımladığımız
bir değişkenin değerini değiştirmeye çalıştığımızda c# derleyicisi derleme aşamasında
hata verecektir. Bu da gözden kaçan bazı hata durumlarını minimuma indirmek
demektir. Sabit ifadeleriyle ilgili bilmemiz gereken 3 önemli kural vardır.
Bunlar şunlardır :
1-) Sabitler tanımlandıklarında değerleri atanmaladır. İlk değer verilmeyen
değişkenler const yani sabit olamazlar.
2-) Sabit ifadelere ancak sabit ifadelerle ilk değer atanabilir yani şu şekildeki
bir kullanım hatalıdır. const int = a + b ;
3-) Sabit ifadeleri içsel tasarım olarak zaten statik oldukları için,
ayrıca statik olarak belirtmek hatalıdır ve kullanılamaz.(statik değişkenler
ileriki yazılarda detayl olarak anlatılacaktır.)
Basit bir sabit tanımlaması aşağıdaki gibi yapılmaktadır.
const double pi = 3.14 ; // double, kesirli sayıları tutmak için
tanımlanmış bir veri türüdür.
|
Değer(value)
ve referans(reference) tipleri
C#
dilinde önceden tanımlanmış(c# dilinde varolan tipler) veri tipleri değer tipleri
ve referans tipleri olmak üzere ikiye ayrılır. Bu iki veri tipi arasındaki farkı
çok iyi kavramak gerekir. Daha önce dediğimiz gibi değişkenler bellekte bulunan
verilerdir. Aslında bir değişkeni kullanırken o değişkenin bellekte bulunduğu
adresteki veriye ulaşıyoruz. Değer tipleri değişkenin değerini direkt bellek
bölgesinden alırlar. Referans tipleri ise başka bir nesneye referans olarak
kullanılırlar. Yani referans tipleri aslında bir çeşit bellek bölgesi olan heap
alanında yaratılan veri türlerinin (bunlara kısaca nesne de diyebiliriz) adreslerini
saklarlar. Değer tipleri yaratıldıklarında stack dediğimiz bellek bölgelerinde
oluşturulurlar, referans tipleri ise kullanımı biraz daha sınırlı olan heap
dediğimiz bellek bölgesinde saklanırlar. C ve C++ dillerine aşina olan arkadaşların
da tahmin ettiği gibi gösterici kavramı ile referans veri tipleri arasında çok
fazla fark yoktur. Fakat C# dilinde kullanıcının direkt olarak kullanabileceği
bir gösterici veri türü tanımlamak yoktur. Bunun yerine bazı değişkenler değer
tip bazıları ise referans tipi olarak işlem görürler. Peki bunlar nelerdir?
Temel veri tipleri olan int,double, float ve yapı nesneleri gibi veri türleri
değer tipler, herhangi bir sınıf türü ise referans türüdür. İki değer tipi nesnesini
birbirine eşitlerken değişkenlerde saklanan değerler kopyalanarak eşitlenir
ve bu durumda iki yeni bağımsız nesne elde edilmiş olur yani birinin değerini
değiştirmek diğerini etkilemez, ancak iki referans tipini birbirlerine eşitlediğimizde
bu nesnelerde tutulan veriler kopyalanmaz, işlem yapılan nesnelerin heap bölgesindeki
adresleridir, yani iki nesne de aslında heap bellek bölgesinde aynı adresi gösterecekleri
için birinde yapılan değişiklik diğerini de etkileyecektir. Referans tiplerini
tanımlarken herhangi bir adresi göstermediğini belirtmek için null değere atanırlar.(Mesela:
y = null ;)
CTS (Common Type System) Tipleri
.NET bir yazılım geliştirme platformudur. Aslında bütün veri tipleri CTS
dediğimiz bir sistem ile tanınırlar. Yani C# dilinde ki veri türleri aslında CTS 'deki
veri türleri için birer arayüz gibidirler. CTS sayesinde .NET platformu için
geliştirilen bütün diller aynı veri tiplerini kullanırlar, tek değişen veri türleni
tanımlama yöntemi ve sentaksıdır. Bu yüzden bizim C# dili ile tanımlayacağımız her
veri tipinin CTS 'de bir karşılığı mevcuttur. Bu veri türleri ve CTS karşılıkları
aşağıda tablolar halinde mevcuttur.
C# dilinde tanımladığımız bütün basit veri tipleri aslında CTS 'de bulunan bir
yapı nesnesidir.C# dilindeki önceden tanımlanmış temel veri tipleri on beş tanedir.
Bunlardan on üçü değer tipi ikisi de değer tipidir.
Önceden Tanımlanmış Value Veri Tipleri
Aşağıda temel value tiplerin C# dilindeki adı, CTS karşılığı, açıklaması ve
kullanım aralığı bulunmaktadır.
C#
taki adı |
CTS
Karşılığı |
Açıklama |
Max
ve Min aralık yada değeri |
sbyte |
System.Byte |
8
bit işaretli tamsayı |
-128
: 127 |
short |
System.Int16 |
16
bit işaretli tamsayı |
-32.768
: 32.767 |
int |
System.Int32 |
32
bit işaretli tamsayı |
-2.147.483.648
: 2.147.483.647 |
long |
System.Int64 |
64
bit işaretli tamsayı |
-9.223.372.036.854.775.808
: -9.223.372.036.854.775.807 |
byte |
System.Byte |
8
bit işaretsiz tamsayı |
0
: 255 |
ushort |
System.UInt16 |
16
bit işaretsiz tamsayı |
0
: 65.535 |
uint |
System.UInt32 |
32
bit işaretsiz tamsayı |
0
: 4.294.967.295 |
ulong |
System.UInt64 |
64
bit işaretsiz tamsayı |
0
: 18.446.744.073.709.551.615 |
float |
System.Single |
32
bit tek kayan sayı |
+yada
- 1,5*10-45 : + ya da - 3,4*1038 |
double |
Sytem.Double |
64
bit çift kayan sayı |
+yada
- 5*10-324 : + ya da - 1,7*10308 |
decimal |
System.Decimal |
128
bit ondalıklı sayı |
+yada
- 1,5*10-28 : + ya da - 7,9*1028 |
bool |
System.Boolean |
|
true ya
da false |
char |
System.Char |
Karakterleri
temsil eder |
16
Unicode karakterleri |
Şimdi
tabloda verilen veri türleri ile ilgili tanımlamalara örnekler verelim :
long a = 0xEF20 ; // 0x öneki sayıları hexadecimal olarak yazmamızı
sağlar.
ulong ul = 5698UL ; // Sayının sonuna UL koyarak UnsignedLong olduğunu
belirtiyoruz.
float fl = 3.14f ;
decimal d = 65.25M;
bool b = false ;
char ch1 = 'a' , ch2 = '\\' , ' \" ' , 'm' ;
|
Önceden
Tanımlanmış Reference Veri Tipleri
C# dilinde önceden tanımlanmış iki tane referans tipi vardır. Bunlar string
ve object türleridir. Object türü C# dilinde bütün türlerin türediği bir sınıf
yapısıdır. Kullanıcı tarafından sonradan tanımlanacak bütün veri tipleri de
aslında Object türünden türemiş olacaktır. Bu da object türünden bir nesneye
herhangi bir veri türünden nesneyi atayabileceğimiz anlamına gelir. Çünkü C#
dilinde bütün nesneler bir object'dir. object 'ler özelliştirilerek farklı amaçlar
için kullanılır. Herhangi bir nesneyi object türü ile eşleştirme kavramı boxing
olarak adlandırılır. Boxing ve bunun tersi işlemi olan unboxing kavramlarını
daha sonraki makalelerimizde detaylı olarak inceleyeceğiz.
Diğer bir referans tipi ise string türüdür. C ve C++ gibi dillerde string işlemleri
yapabilmek için karakter dizileri tanımlanır ve bunlar string olarak işleme
alınırlar ancak C# dilinde karakter dizileri tanımlamak yerine string adı ile
yeni bir türü mevcuttur. String veri türü birtakım yararlı işler daha kolay
bir şekilde yapılmaktadır. Mesela aşağıda iki string' in + operatörüyle arka
arkaya nasıl eklendiği gösterilmektedir. + operatörü burada string sınıfı için
yüklenmiştir(overload). Overloading kavramı başlı başına bir makale konusu olduğu
için burada değinmeyeceğim.
string s1 = "Hello " ;
string s2 = ".NET" ;
string s3 = s1 + s2;
Bir dilin sentaksı açısından özel anlamlar ifade eden karakterleri
kullanmak istiyorsak bunları \ (escape) ifadesiyle belirtmek gerekir.
Mesela bir dizin bilgisini içeren bir string nesnesini aşağıdaki gibi
tanımlarız.
string yol =
"C:\\docs\\xxx\\" ;// Bu tür kullanıma escape
sequence kullanımı denir.
Escape sequence 'leri kullanmak yerine string içinde görünen ifadenin
aynısı belirtmek için string ifadesinin önüne @ işareti kullanılır.Mesela
;
string esc =
@"C:\docs\xxx\" // böyle bir kullanımda escape
karakterini kullanmayı kaldırmış oluyoruz.
|
C#
taki adı |
CTS
Karşılığı |
Açıklama |
object |
System.Object |
Bütün
veri türlerinin türediği kök eleman |
string |
System.String |
Unicode
karakterlerinden oluşan string |
Yukarıda
C# dilindeki temel referans veri türleri tablo halinde gösterilmiştir.
Bir sonraki makalemizde C# temel kontrol yapılarını göreceğiz.
Makale:
C# Dilindeki Temel Veri Türleri C#, Visual C# ve .NET Sefer Algan
|
|
|
-
-
Eklenen Son 10
-
Bu Konuda Geçmiş 10
Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
Son Eklenen 10 Makale Yükleniyor
Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor
|
|