Bu site emekli olmuştur. Arşiv amaçlı olarak BT AKADEMİ sponsorluğunda yayın hayatına devam etmektedir.




C#nedir?com
 
YAZAR HAKKINDA
Sefer Algan
Sefer Algan
http://www.seferalgan.com
İletişme geçmek için tıklayın.
71 Makalesi yayınlanmakta.
Yazar hakkında detaylı bilgi için tıklayın.
Yayınlanan diğer makaleleri için tıklayın.
İlgili etiketler:  C# / VC#/.NET Sefer Algan
 
YAZI HAKKINDA
Türü : Makale
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
Seviyesi : Başlangıç
Kategori : C# / VC#/.NET
Yayınlanma Tarihi : 27.12.2002
Okunma Sayısı : 81256
Yorum Sayısı : 3     yorum yaz
Site İçi AramaSİTE İÇİ ARAMA
Üye Girişini AçÜye GİRİŞİ
Üye girişi için tıklayın.
Kullanıcı Adı
Şifre
 
Beni her zaman hatırla
Bir hafta boyunca kullanıcı bilgilerinizi kullanıcı çıkışı yapana kadar hatırlar. (Paylaşılan bilgisayarlarda önerilmez.)
 
Şifremi / Kullanıcı Adımı unuttum.
 
.net TV RSS Serbest KÖŞE (?)
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
emre TAŞ
Silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
Makale Gönder Bende Yazmak İstiyorum
.net TV RSSBlogroll
Turhal Temizer
Conda install environment.yml Package 21.12.2024
Turhal Temizer
Mac OS/X Removing CUDA 21.12.2024
Burak Selim Şenyurt
Rust ile ECS Yaklaşımını Anlamak 21.12.2024
Burak Selim Şenyurt
Birlikte Rust Öğrenelim Serisi 21.12.2024
  Diğer Herşey
Sponsorlar
BT Akademi
Medya Portakal
Video Hosting Sponsoru
Csharpnedir.com bir Ineta üyesidir
Uzman Abi
Her Yönüyle C# - Sefer Algan
C# Dilindeki Temel Veri Türleri
 
Kapat
Sayfayı Yazdır Sık Kullanılanlara Ekle Arkadaşıma Gönder MySpace Del.Ico.Us Digg Facebook Google Mixx Reddit StumbleUpon
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.


Veritipi veriadı ;

Ö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.


int a ;

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
  • Yazılan Yorumlar
  • Yorum Yaz
ARA
26
2009
byte yas; //0-255 aralığında değer alır.. insanın olabileceği yaş aralığı düşünüldüğünde byte daha uygun
ARA
12
2009
hocam böyle güzel açıklamalı anlatım için tşk.bir sorum olacaktı:::bir insanın yaşını tanımlamak için hangi veri tipini kullanmalıyız?...byte mı yoksa int mı?
EYL
16
2005
hocam tabloda Byte ile sbyte veri türlerinin CTS karşılıkları aynı gibi görünüyor.. bu konuda ki düzeltmeyi yaparsanız iyi olur.. makale için teşekkürler..
Sayfalar : 1 
Yorum yazabilmek için üye girişi yapmalısınız. Üye girişi için tıklayın.
Üye değilseniz Üyel Ol linkine tıklayarak üyeliğinizi hemen başlatabilirisniz.
 
  • Bu Konuda Son 10
  • 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