İLK C# PROGRAMI VE TEMEL VERİ TÜRLERİ
İlk konumuz da C# ve .Net dilinin yapısını detaylı bir şekilde öğrendikten sonra artık bu bölümde bu dilleri kullanmaya başlamalıyız. Her zaman kodlama dillerinden bir platformu kullananlar ilk olarak kod dünyasındaki klasik cümlemiz olan “ MERHABA DÜNYA ” yazısını ekrana yazdırarak bu işe başlamışlardır.
Bizde bu bölümde ekrana nasıl “MERHABA DÜNYA“ yazdırılır ve ardından programımızı nasıl derleyip çalıştıracağımıza bakacağız. Yazarken bir kodun ne anlama geldiğini bu kod parçasının ne işe yaradığını öğrenmemiz bize program yazmakta büyük fayda sağlayacaktır.
İlk C# Programımız
Burada yazacağımız program en basit ve çalışabilecek en temel programdır. Bu programı yazmak için Windows ile birlikte gelen Notepad ya da farklı bir metin editörlerinden biriyle yazabilirsiniz . Şimdilik yazdığımız programı “ ilk_deneme1.cs“ ismiyle veya istediğiniz bir isim ile de kaydedebilirsiniz.
ilk_deneme1.cs
[code=csharp]
namespace İlk_deneme1
{
class Program
{
static void Main(string[] args)
{
System.Console.WriteLine("merhaba dünya!");
Console.ReadLine();
}
}
}
[/code]
NOT !! “
Console.ReadLine(); ” Kısmını ilk etapta yazmayarak çalıştırınız ve sonrasında yazıp çalıştırın . Burada ki amacım
ReadLine ne işe yarar onu kendiniz test ederek görmeniz. ReadLine konu içerisinde anlatılacaktır.
Programı derlemek ve çalıştırmak
Genel olarak C# dili ile yazılan kaynak kodların uzantıları “cs” olarak kaydedilir. Bu yazdıklarımızı kaydettikten sonra çalıştırmak üzere derlemeliyiz. Bu kaynak kodları içeren dosyalar
“cs” uzantılı olmak zorunda değillerdir fakat C# dilinin kullanıldığını ve yazıldığını temsil etmiş olduğundan kaydetme sırasında uzantınızı “cs “olarak vermeniz önerilir.
Derleyicimiz metin bazında yazılan kaynak kodları derleme aşamasında kodu satır satır işleyerek ve exe. uzantılı olarak çalıştırır.
Şimdi derleme aşamasına gelelim:
İşletim sistemimizde
DOS moduna geçmemiz gerekir. “
Başlat (Start)” menüsünden “
Çalıştır(Run)” komutunu seçip
Command (cmd) seçip programını çalıştırın.
Karşınıza çıkan ekran görüntüsünde son satırdan önce herhangi bir hata mesajıyla karşılaşmadığımıza dikkat edelim.
Eğer bir hata mesajı almadıysak bu bizim kaynak kodumuzun başarılı bir şekilde derlenip çalıştığını gösterir.
İlk C# programı olarak yazmaktaki amacımız ekrana bir şeyler yazdırmak değildi. Buradaki önemli nokta temel basit bir örnek üzerinde C# dilini anlamaktır. Şimdi yazdığımız kodu inceleyelim.
[code=csharp]
ilk_deneme1.cs
namespace İlk_deneme1
{
class Program
{
static void Main(string[] args)
{
System.Console.WriteLine("merhaba dünya!");
Console.ReadLine();
}
}
}
[/code]
Programlama bilginiz hiç yok ise yukarıdaki kod satırların ne anlama geldiğini bilmeyişiniz ile birlikte ilk etapta size karmaşık gelecektir. Ama bu sizi şimdiden yapamam edemem kod yazmak benim harcım değil gibi gereksiz düşüncelerle vazgeçiren bir neden olmasın. Çünkü gerçekten bu işi öğrenmek istiyorsanız onu önce kendinizce kabullenmeniz gerek. Daha sonra böyle küçük adımlar deneyin emin olun bu size bir şey kaybettirmeyecektir. Bir yerden başlayın ve kendinize biraz güvenin sürekli kendinize ben bunu öğrenebilirim bu iş benim için çok basit demekten kaçınmayın. Kendinizi sürekli psikolojik olarak öğrenme moduna geçirin. İnanın bu işe başlayıp bir şeyler öğrenen herkes bu tarz düşünceleri kendince başarıyla uygulayanlardır. Neden bu insanlardan biri de siz olmayın.
Hadi bakalım kolları sıvayalım. :)
Şimdi yazdığımız koda geri dönelim.
1.C# dili nesne yönelimli bir dildir ve yaptığımız her şey bir
sınıf (class) nesnesidir. Nesne olmayan hiçbir şey olmadığı gibidir. Programcıların hatırlayacağı gibi C ve C ++ dillerinde Main işlevi yani fonksiyonu bir programın çalışmaya başladığı kısımdır. Yalnız Main hiçbir zaman Class içinde olmamıştır. C# dilinde her yazılan şey bir sınıfı temsil eder ve bizim Main dediğimiz olay ancak bizim belirlediğimiz bir Class ın işlevi olmak zorunda olur. Bir program yazarken dikkat edilmesi gereken nokta kaynak kodu bir Class ın içerisine yazmaktır.
Çünkü yazdığımız kodun derlenmesi için C# dilinde yazılan programlar en az bir sınıf içermelidir.
[code=csharp]
class Program
{
. . . . . . . . .
{
[/code]
2.Daha önceden de ifade edildiği gibi ilk programımızda ,bir sınıfın işlevi olan Main , C ve C++ dillerinde olduğu gibi özel anlamları vardır.
Programımızın çalıştırmasını sağlayan derleyiciler nerden çalışılacağını bilmek isterler yoksa derleme esnasında programınız için ” başlama noktası bulunamadı” hatası alırız. Main bizim için bir başlangıç noktasıdır.
3.C# dilinde satırlar “
; “ ( noktalı virgül) ile sonlandırılır bazı istisnai durumlar dışında bu olmaz. Bu kısımları kod yazarken ve öğrenirken zamanla göreceksiniz.
4.Diğer kullandığımız işaret ise “
{ } “ küme parantezidir. Sınıflar ve işlevler bu parantezlerin arasına yazılır. Açılan parantez yazdığımız kod parçacıklarının başlangıç noktasını , kapanan parantez ise sonlanma noktasını gösterir.
Yukarıda ki örnekte yazdığımız kod kısmında class tan sonra bir parantez açılmış sonrasında dikkat edilirse Main fonksiyonu kullanılmıştır. Burada aklınıza Class’tan hemen sonra niçin parantezi kapatmadık sorusu gelmiştir. İşte burada
“iç içe ( nested) ” dediğimiz olay vardır. İç içe parantezler C ve C++ dillerinde olduğu gibi ilk açılan parantez en son kapanır.
5.C# dilinde her şey sınıf denilen nesneler üzerinde kurulmuştur. Bu sınıflar da çeşitli görevleri yerine getiren metotlar vardır.
.Net üzerinde kullanılmakta ve yazılım geliştirmek için kullanılan bir araç olan C# dili .NET ‘in
sınıf kütüphanesinden (Class Library) yararlanma fırsatını bize sunmaktadır. Bu kütüphane ile hemen her sınıfa ulaşmak çok kolay olmuştur. Bu kütüphane sayesinde “ Namespace “ isim alanı dediğimiz bu sınıflara ulaşmak kolaylaşmıştır.
Bir diğer önemli noktamız ise yazdığımız kodda yer alan “
WriteLine “ kısmıdır. Türkçe karşılığı “
Satır Yaz ” olarak çevirilir. Yani bu kısımda WriteLine ile birlikte parantez içerisine yazdığımız herhangi bir yazıyı ekrana yazdırma işini yapar. Biz burada ekrana “Merhaba Dünya “ yazdırdık. WriteLine Console sınıfında yer alan ve Console’un işlevlerini yerine getiren bir metottur.
Şimdi başka bir örnek deneyelim. Bu örnekte yine sonuç olarak ekrana Merhaba Dünya yazdırıcaz fakat yapısal farklılıklar yaparak ilk örneğimizle karşılaştıralım.
Programı kaydederken “ İlk_deneme2.cs” adını verebilirsiniz.
İlk_deneme2.cs
[code=csharp]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ilk_deneme2
{
class Program
{
static void Main(string[] args)
{
System.Console.WriteLine("merhaba dünya!");
Console.ReadLine();
}
}
}
[/code]
Burada dikkat edilmesi gereken yazdığımız programın en üstünde yer alan “
Using System; “ kısmıdır. Bu deyim, C# dilinde bütün sınıflara doğrudan erişim hakkı tanır.
Özetle şu demek oluyor ;
System.Console.WriteLine(“Merhaba Dünya”); yerine
Console.WriteLine(“Mehaba Dünya”) ; şeklinde yazmayı sağlar.
Böylece sürekli System ifadesini kullanmak zorunda kalmayız.
Yine bir örnek deneyelim. Bu örneğimizde Console ekranında “bir tuşa basın” yazısı karşımıza çıktıktan sonra hiç bir tuşa basmadığımız zamana kadar her hangi bir değişiklik olmasın. Daha sonra selam yazalım ve Console ekranında karşımıza “bir tuşa bastınız “ yazsın. Burada ekrandan kullanıcının bir işlev yapmasınını istiyorsak Console sınıfından ReadLine metotunu devreye koymamız gerek.
ReadLine , ekrandan bir yazı girilmesini ve enter tuşuna basana kadar bekleyen bir metottur.
Tıpkı WriteLine gibi kullanılır tek fark parantez kısmına birşeyler yazılmaz WriteLine ise ekranda karşımızda ne çıkmasını istiyorsak parantezlerin içersine onu yazarız.
İlk_deneme3.cs
[code=csharp]
namespace ilk_deneme3
{
class Program
{
static void Main(string[] args)
{
System.Console.WriteLine("bir tuşa basın!");
Console.ReadLine();
System.Console.WriteLine("bir tuşa bastınız..");
Console.ReadLine();
}
}
}
[/code]
Ekran Çıktısı:
[img]http://www.dbakademi.com/img/1_charpEgitim.png[/img]
C# Veri Temel Veri Türleri
Önceden Tanımlanmış Veri türleri ve Kullanıcı Tarafından Tanımlanmış Veri türleri olmak üzere temel veri tipleri ikiye ayrılır.
Önceden tanımlanmış veri türü
Referans Tipi (Reference Type) ve
Değer Veri Tipi (Value Type) olmak üzere iki çeşittir.
Şimdi veri tipleri nasıl tanımlanır ve nasıl değer verilir onlara bakalım.
Değişkenkenler
İçinde farklı veri türleri olan değişkenler, girdiğimiz değerleri alan veya programın çalışmasıyla bazı değerlerin atandığı veri tutucularıdır.
Değişken tanımlama ise girilecek verinin veya programın getireceği verinin ne olduğuna bağlı olarak değişken türünün belirlenmesidir. Örneğin, girilecek verinin bir tamsayı olması halinde o değişkeni de tamsayı olarak tanımlamak gerekir. Değişik türler için bu işlem farklı farklı tekrarlanmalıdır.
Değişkenler kullanılmaya başlamadan önce tanımlanırlar ve bu olaya tanımlama denmektedir. Derleyicimiz tanımlama satırında yer alan değişken tipine göre bellekte uygun miktarda yer ayırır.
Veri türleri bellekte tutulurken altı bölgeden biriyle bu işi yapmaktadır.
1. Stack Bölgesi: Stack denildiğinde akla ilk gelen RAM’dir. Programın çalışma esnasında bir tamsayı veri türünün yüklendiği ve tutulduğu yer bu alandır.
Stack Pointer ,belleğimizde kapladığı alana göre azaltma ya da arttırma işlemini uygular. Stack Pointer dediğimiz olay bellekte çalışılan bölgenin adresini tutma işini yapmaktadır.
Yani Stack pointer çalışma zamanı öncesinde verinin ne kadar alan kapladığını bilmesi gerekir . C#’ ta bazı nesneler referans yoluyla belirtilmiş ve bu yüzden verinin kendisi Stack’ta bulunmayabilir.
2. Heap Bölgesi: Ram de bulunan hafıza alanlarıdır. Stack bölgesi gibi düşünlünebilir. Tüm C# nesneleri bu bölgede oluşmaktadır. Stacktan farkı ise derleyicinin nesnenin yer tahsisatını bilinmesi zorunlu değildir.
Heap kullanmanın avantajı programımızda esneklik katmaktır. Bir nesneye alan tahsis etmek New denilen anahtar kelimesi ile yapılmaktadır. Heap Kullanmanın avantajı olduğu gibi dezavantajı da vardır.En önemli dezavantajı işlem hızının Stack işlem hızına oranla daha yavaş olmasıdır.
3. Register Bölgesi: Mikroişlemcinin içerisinde bulunan sınırlı sayıdaki yapılardır. Register da ikincil bellek yoktur bu da Stack ve Heap mekanizmalarından daha hızlı olmasını sağlar. Sınırlı yapısı nedeniyle derleyiciler çok fazla işlem yaparken hız kazanmak için verileri burada tutarlar.
4. Static Bölge: Bellekte herhangi sabit bir bölgeyi temsil eder.Bu alanda tutulan veriler işlem esnasında programın çalışma süresince burada tutulurlar. Static ifadesiyle C# ‘a bu özelliği ekleyebilirsiniz.
5. Sabit Bölge: Program kodları içerisinde gömülü şekildedirler. Sabit(Constant) değerdir ve değişmesi mümkün değillerdir.
6. RAM Olmayan Bölge : Bellek bölgelerinin olmadığı disk alanlarını temsil etmektedir. Veri türlerinden bazılarını kalıcı olarak kalmasını istediğinde, diğer tüm bölgelerde yer alan herhangi bir verinin program sonlandırılırken bir kısmını alarak diske kaydeder.
Değişken Tanımlama
<Ver türü > <isim> ; genel olarak bu şekilde tanımlama yapılır.
Örneğin;
int a
char e;
double b;
bool c;
float d;
gibi çeşitli veri türlerine göre tanımlama yapabiliriz.
Sadece değişken tanımlama bu şekilde kalamaz birde bu değişkenlere değer ataması yapmalıyız. Burada derleyiciler ‘a’ değişkenini kullanmamıza izin vermez, çünkü işlem yapması için neyin ne anlama geldiğini bilmesi gerekir. Bu yüzden değişkenlere değer atarken eşittir
( = ) operatörünü kullanırız. Diğer bir yöntem ise değişken bildiriminden sonra , bu değişkene değer atarız. Aşağıdaki öneklerde olduğu gibi .
int a =10 ;
( burada bellekte değişken tanımlaması yapılırken değeri 10 olarak düzenleyip işlemi gerçekleştiriyor.)
int b;
b=10;
(yine ilk satırımızda değişken tanımını yaptık ikinci satırımızda değişkenimize bir değer verdik.)
Bu iki değer tanımlama şekli sadece yazımı farklıyken yaptıkları iş tamamen aynıdır.
Diğer bir kullanım örneği de şu şekildedir.
int a=10, b;
b=10;
(Bu kısımda a ve b değişkeleri aynı tiptedir.Eğer ki kullanıcı olarak bir satırda, birden fazla değişken tanımlaması yapmak istiyorsanız bu şekilde yan yana virgül kullanarak yapmalısınız.)
Yine virgül kullanarak tek bir satırda aynı türlerden birden çok değişken tanımlayabiliriz.Aşağıda yer alan değişkenler double veri türündedir.
Double a, b,c;
Bu kısıma kadar önemli olan nokta değişken tanımlarken bir değer ataması yapmaktır aksi taktirde derleyicimiz bu işlemi yapmamıza izin vermeyecektir. Yani herhangi bir işlem yapamak istiyorsak mutlaka değer ataması yapmalıyız.
int a;
Console.WriteLine(a);
(Bu kısımda olduğu gibi kodu yazıp çalıştırmak istediğimizde programımız derleme yapamayacaktır ve bize hata verecektir.)
Değer tanımlaması yaparken sınırlama yoktur.Kaynak kod kısmında herhangi bir yerde yapılabilir.
Bir diğer önemli noktamız ise C ve C++ ta
büyük-küçük harf duyarlılığı(case sensitivity) olduğu gibi C# ‘ta da aynı kural geçerlidir. Değişken tanımlama yaparken değişkenlere vereceğimiz isimlere dikkat etmeliyiz.
Yani büyük ve küçük harfler derlenirken farklı algılanır.Örneğin ‘ UCRET ‘ ve ‘Ucret ‘ farklı isim olarak algılanır. Büyük -küçük harf kuralına uygun bir örnek:
ilk_deneme4.cs
[code=csharp]
namespace ilk_deneme4
{
class Program
{
static void Main(string[] args)
{
int Ucret = 10;
int UCRET;
UCRET = 50;
System.Console.WriteLine(Ucret);
System.Console.WriteLine(UCRET);
Console.ReadLine();
}
}
}
}
[/code]
Yorum satırı eklemek için “
// “ işaretleri kullanılır. Kaynak kodu açıklamak için kullanılır. Bazı yerlerde farklı şekilde kullanımlarıda karşımıza çıkar. Örneğin ;
/* burası bir yorum satırıdır. "
*/ " gibi de kullanılmaktadır.
Diğer bir kural değişken tanımlarken 1,2,3,... gibi sayısal ifadeler ile başlayamaz. İsimler arasında boşluk bırakılamaz.Aşağıdaki örnekler de bu kurallara yer verilmiştir.
Yanlış tanımlamaya örnek bir program:
ilk_deneme5.cs
[code=csharp]
namespace ilk_deneme5
{
class Program
{
static void Main(string[] args)
{
int 1ucret = 10; //yanlis
int ucret katsayisi = 2; //yanlis
int ucret1 = 10; //doğru
}
}
}
[/code]
Değişkenlerin Faaliyet Alanı
C# dilinde programlar açılan ve kapanan parantezler içerisine yazılır. Bu açalıp kapanan kısımlardaki olan bölgeye blok denir. Bu aralıkta yer alan blok kısmı değişkenin faaliyet alanı denir. Aşağıdaki kriterlere göre faaliyet alanları belirlemektedir.
- Bir sınıfın üye elemanı olarak tanımlanmış değişkeni her zaman sınıfın faaliyet alanı içerisindedir.
- Yerel bir değişken, tanımlandığı blok arasında kaldığı sürece faaliyet alanındadır.
- For, while, do-while gibi döngü bloklarında tanımlanan değişkenler döngünün dışına çıkılmadığı sürece faaliyet alanındadırlar.
[code=csharp]
{
{
int a=20; //blok 1
}
{
int a=20; //blok 2
}
}
[/code]
(Her iki a değişkeni birbirinden farklı bölgelerde bellekte tutulurlar ve tamamen birbirinden bağımsızdırlar.)
Bu programı derlerken bize bir uyarı verecektir. Bu uyarının nedeni ise faaliyet alanı değil sadece her iki a isimli değişken herhangi bir yerde kullanılmamıştır. Uyarı sebebi bu yüzdendir.
Diğer bir önemli nokta ise Main bloğunda tanımlanan a değişkeninin faaliyet alanıda açılan blokta devam ederse geçersiz olur.
Aşağıda yer alan örnekteki gibi kurallara uygun bir şekilde tanımlanması ile hata vermeyecektir. Ve çalıştırdıktan sonra ekrana 5 yazdığını göreceksiniz. Bu demek oluyor ki iki ayrı a değişkeni olduğunu ve Main bloğunun içerisinde olan a değişkenini çalıştırmış oluyor.
[code=csharp]
namespace faaliyet_alani
{
class Program
{
static int a = 10;
static void Main(string[] args)
{
int a = 5;
Console.WriteLine(a);
Console.ReadLine();
}
} }
[/code]
Sabit İfadeleri
Sürekli kullanmak istediğimiz ve program süresince değişemeyecek olan değerlere
sabit (const) veri denir.
Tanımlama yaparken const ifadesiyle yaparız.
Sabit(const) verinin kullanılmasının bize avantajı program içerisinde sıkça kullandığımız değerleri ani bir durumda değiştirilmek istendiğinde devreye girer ve yapmak istediğimiz değişikliği uygulayabiliriz.
Örneğin, değişmeyen ve sürekli kullandığımız bir pi sayısını sabit bir veri olarak tanımlayabiliriz. İstediğimiz vakit bu değerde değişiklik yaparız. Sadece bu değeri programın tamamında kullanacaksak sabit değer olarak programın içerisine tanımlarız ve derleyicimiz bu ifadeyi yapacağı işleme göre hepsine uygular.
Bu tanımla işini normal bir şekilde yapmakta mümkündür fakat bu çok uzun yazılan yüzlerce satırlık bir program olduğunu düşünürsek bu bize ne kadar zaman kaybının yanında hepsine tanımlamak ta haylice zor bir iş olacaktır. Sabit verinin avantajı bu konuda çok işe yaramaktadır.
Dikkat edilmesi gereken ise Const olarak tanımlanan bir değişkenin değerini değiştirmek istediğimiz zaman, derleyicimiz bize hata verecektir. Bu da gözden kaçan durumlarda hatayı en aza indirmek demektir.
Bir programın tamamında kullanılmak için tanımlanan sabit pi sayısını tanımlamak aşağıdaki gibi olur.
Const double pi=3.14;
Program devam ederken herhangi bir yerde değişiklik yapmak istediğiniz vakit hata verecektir. Hatanın ne olduğunu görmek için bu kodları yazıp çalıştıralım.
[code=csharp]
namespace sabitler1
{
class Program
{
static void Main(string[] args)
{
const double pi = 3.14;
pi = 3.1;
}
}
}
[/code]
Yeni aynı şekilde sabitlere ilk değer verilirken yine sabitler kullanılmalıdır. İlk değeri vermediğimiz durumlarda derleme esnasında bize tekrar hata verecektir. Aşağıdaki kodda yer aldığı gibi.
[code=csharp]
namespace sabitler2
{
class Program
{
static void Main(string[] args)
{
int a = 3, b;
b = a;
const int c = a + b;
}
}
}
[/code]
Bu aşağıda yer alan program da doğru bir kullanımdır. Çalıştırıldığında ekrana 8 yazacaktır. Const olarak tanımladığımız değişkene ilk değer ataması yaparken sadece sabitlerin kullanılması gerekiyordu. Bu kısımda b değişkeni derlenirken a değişkeni ise bir sabit olarak işlemi yapmaktadır. Üzerinde değişiklikler yaptığımız taktirde bu kısım geçersiz hale gelecektir.
[code=csharp]
namespace sabitler3
{
class Program
{
static void Main(string[] args)
{
const int a = 3;
const int b = a + 5;
Console.WriteLine(b);
Console.ReadLine();
}
}
}
[/code]
Sabit veriler için bilinmesi gereken 3 önemli kural vardır. Bunlar;
1. Sabit veri tanımlaması yapacağımız durumlarda değer ataması yapılmalıdır. İlk değer verilmeyen sabitlere, sabit (const) görevini yapamaz.
2. Değer atarken sabit değer ifadeleri ile yapılmalıdır.
3. Sabit ifadeler statiklerdir. Bunları ekstra belirtmek hata olur ve o şekilde kullanılamaz.
Sabit ifadelere örnekler;
100, 200,-100 (int sabitleri)
‘A’, ‘s’, ‘ \\’ (char sabitleri)
10.20,2.3,-1.1 (float sayı türü sabitleridir.)
Değer(Value) ve Referans (Reference) Tipleri
Önceden tanımlanmış veri tipleri ikiye ayrılırlar. Bunlar
“Değer Tipleri “ ve
“Referans Tipleri “ dir.
Bu iki değer tipi arasındaki farkın iyi bilinmesi gerekir. Değişkenler bellekte tutulan veriler olduğundan bahsetmiştik. Yani biz bir değişkeni kullandığımız zaman bellekte tutulduğu adresteki veriye ulaşıyoruz.
Değer tipleri bellekten değişkenin değerini direk alırlar. Referans tipleri ise başka bir nesneye referans olarak görev yaparlar. Bu referans tipleri heap alanında oluşturulurlar ve adresleri tutarlar. Bu bölgede kullanımları kısıtlıdırlar. Değer tipleri ise stack bölgesinde tutulurlar.
C# dilinde kullanıcının direkt olarak kullanacağı bir
gösterici (pointer) veri türü tanımlaması yoktur. Ama bunun yerine bazı değişkenler değer tipleri bazıları da referans tipleri olarak işlem görürler.
Temel veri tiplerinden int , double , float ve yapı nesneleri değer tipleriyken, herhangi bir sınıf türü ise referans tipidir.
Birbirileriyle iki referans tipini eşitleyecek olursak bu nesnelerde tutulan verileri kopyalayamayız. Çünkü işlem yapılan nokta heap bölgesinde tutulan adreslerdir. Heap bölgesinde tutulan aynı iki nesne aynı adresi gösterecektir. Bu da yapacağınız bir değişiklik diğerini de etkileyecektir.
Referans tipin de bir adresi göstermediğini tanımlayacak olursak
Null ifadesiyle yaparız. Örneğin;
y = null;
(y nesnesi, null adresinde tanımlanma yapılmış ve null bellekte bir adrese karşılık gelmemektedir.)
CTS(Common Type System) Tipleri
Tükçe karşılığı
“Ortak Tür Sistemi “ dir. Tüm veri tipleri
CTS dediğimiz bu sistem ile tanınırlar yani kısacası C# dilinde kullanılan veri tipleri CTS dediğimiz yapının veri türlerinin arayüzü gibi düşünülebilir.
CTS ile .NET için geliştirilen diller aynı veri tipini kullanmamızı sağlamıştır. Sadece tanımlama yöntemi farkılılık gösteririr yani C#’ ta tanımlanan bir veri tipi CTS ‘de bir karşılığı vardır.
.NET çatısında herhangi bir programlama diliyle yazdığınız bir bileşenin (DLL kütüphanesi veya User Control Nesneleri gibi) başka herhangi bir .NET dili ile kullanabilmenize olanak sağlar. CTS yapısında temel nesne türlerini barındırır. Bunlar Object, Integer, String, Char, Double, Decimal... v.b. türlerdir.
C# dilinin önceden tanımlanmış veri tipleri on beş tanedir. Bu tiplerden on üçü değer geri kalan ikisi ise referans tipi olarak tanımlanır. Aşağıda CTS veri türleri yer almaktadır.
VERİ TİPLERİ
1. Değer Tipleri
Temel Veri Tipleri
Kullanıcı Tanımlı Tipler
Enum Sabitleri
2. Referans Tipleri
Öz Nitelikli Veri Tipleri Göstericiler Arayüzler
Sınıflar
Temsilciler
Kullanıcı Tanımlı Sınıflar
Boxed Değer Tipi
Diziler
Değer Tipleri
Değer tiplerinin tümü Objet nesnesinden türetilmiştir.Yani C# taki
veri tipleri bir nesnenin adresini bulur ve adresteki veriye direkt erişerek veriyi alır. Şimdi aşağıdaki örneği inceleyelim.
int a=3;
int b;
b=3;
(bu örnekte integer değer tipi ile bir atama gerçekleştirilmiş a ve b değişkenleri birbirinden bağımsız olarak 3 değerini alıp tutarlar. Ve a değişkeninde bir değişiklik yapıldığında bu b değişkenini etkilemeyecektir.
Yine değer tipi değişkenine aşağıda olduğu gibi iki şekilde ilk değeri verilebiliriz.
Değer_tipi=new int();
Değer_tipi=0;
İlk satırda int tipinden varsayılan
yapıcı ( constructor) dediğimiz işlevi çağırdık. Bu değişkene ilk satırda 0 değeri belirtilmemiş olması halinde değer tipimiz değişken değerini 0 olarak atayacaktır. Bu işlemi gerçekleştiren, kullanılan değer tipinin görevidir.
Yani her bir tip için varsayılan bir ilk değer vardır. Bu ilk değer tipleri varsayılan değerleri ile aşağıdaki gibidir.
[img]http://www.dbakademi.com/img/2_csharpEgitim.png[/img]
Değişken tanımlama ve ilk değer verme tek satırda aşağıdaki gibi yapılmaktadır.
int tamsayi=new int() ; ya da int tamsayi=0 ;
New operatörü ile değişken bildirim ve varsayılan ilk değer tanımlamasına örnek bir programı yazıp deneyelim.
[code=csharp]
namespace değer_tipleri
{
class Program
{
static void Main(string[] args)
{
int a = new int();
bool b = new bool();
char c = new char();
float f = new float();
Console.WriteLine(a);
Console.WriteLine(b);
Console.WriteLine(c);
Console.WriteLine(f);
Console.ReadLine();
}
}
}
[/code]
[img]http://www.dbakademi.com/img/3_csharpEgitim.png[/img]
Şimdi de başlıca ve sıkça kullandığımız veri türlerinden bir kaçının tanımlama şekillerine bir bakalım.
Veri Türleri
Int Veri Türü : 32 bitlik bir işaretli tamsayı türüdür. Sayı tutan veri tipidir. Her yazılım dilinde kullanılır. Eşitlik sonrasında tek tırnak, çift tırnak, nokta ve virgüllü kullanımı yoktur.
-2.147.483.648 ile 2.147.483.647 arasında sayısal değer tutabilir.
Integer değerlerde
+, -, *, / operatörleri kullanılır. Aynı tip olmalarına karşın, matematiksel işlem gerçekleştirir. Parantez önceliği kullanımı da sağlanabilir.
Kullanımı;
😊rn: “ int a; “ şeklinde yapılır.
int sayi= 500;
int sayi1 = - 500;
int sonuc = sayi+sayi1;
Console.WriteLine(sonuc);
Double Veri Türü : 64- bitlik ( 8 Byte) gerçek sayı veri türüdür.
- Yaklaşık ±5.0x10 üssü 324 ile ±1.7x10 üssü 308 arası sayısal uzunluğa sahip değer tutabilir.
- 15 basamaklı değer tutabilir. Double değerler
.(nokta) şeklinde değer alabilir. Noktalı değer dışarıya, virgüllü değer olarak gözükür. double tanımlanan değerlerde, değerin sonuna d (küçük harf ile büyük D) eklenmesi gerekir.
Kullanımı;
😊rn: “ double d=3.12; “ şeklinde yapılır.
double ondalik;
ondalik = 10.2d; yada
double ondalik =10.2d;
double d=3.12D ;
Float Veri Türü : 32- bitlik ( 4 Byte) gerçek sayı veri türüdür. Yaklaşık
-3.4x1038 ile +3.4x1038 arası sayısal uzunluğa sahip değer tutabilir.7 basamaklı değer tutabilir. Float değerler .(nokta) şeklinde değer alabilir. noktalı değer dışarıya, virgüllü değer olarak gözükür.Float tanımlanan değerlerde, değerin sonuna f (küçük harf ile büyük F) eklenmesi gerekir.
Kullanımı;
😊rn: “ Float f=3.12 F; “ şeklinde yapılır.
float ondalik;
ondalik = 1.14f; yada float ondalik = 12.4f;
Not !! : Sayısal değerler, eşitlikten sonra tek tırnak yada çift tırnak almazlar.
Char Veri Türü : Tek karakter tutabilen char ise, Character kelimesinin kısaltması olup ; harf, sayı yada sembol (,-*/ gibi) içerebilir. Dikkat edilmesi gereken önemli bir nokta ise, değer ataması sırasındaki tanımlanmasıdır.
Char değer ataması iki tek tırnak arasına char değer yazarak gerçekleştirilir. (Örn: char harf = 'a';) Karakterler benzersizlik gösterir. Örneğin; A karakteri, a karakterine eşit değildir. Bunu bilgisayarın her bir karakter için Ascii olarak tanımlanan sayısal ifadeye dökerek algılaması ile açıklayabiliriz. A' nın Ascii değeri 65 iken, a 'nın Ascii değeri 97'dir.
Kullanımı;
😊rn: “ char harf = 'a'; “ şeklinde yapılır.
Byte Veri Türü : 0-255 aralığında sayısal uzunluğa sahip değer tutabilir.
Kullanımı;
😊rn:
byte sayi;
sayi = 7; yada kısaca
byte sayi = 7;
Not !! : Sayısal değerler, eşitlikten sonra tek tırnak yada çift tırnak almazlar.
Sbyte Veri Türü :
Short Veri Türü :
Ushort Veri Türü :
Uint Veri Türü :
Long Veri Türü :
Ulong Veri Türü :
Decimal Veri Türü :
Bool Veri Türü :
Referans Tipleri
Önceden tanımlanmış iki temel referans tipi vardır. Bunlar
string ve
object tipleridir.
Burada ki önemli noktamız object tipidir. Çünkü object tipi tüm veri tiplerinin sonradan kullanıcı tarafından bu tip ile türetiliyor olmasıdır.
Yani bu şu anlama gelmektedir. C# dilinde object türünden bir nesneye herhangi bir veri türünü atayabileceğiz.
String ise diğer bir veri tipimizdir. C ve C++ ta kullanılması için karakter dizilerini tanımlamamızı sağlar.
String Veri Tipi: Unicode karakterleriden oluşturulmuş bir dizi olarak tanımlanabilir.
String veri tipinde kullanılan
“ + “ operatörü bizim iki string ifadeyi birleştirmemizi sağlar.
Bir dilin
söz dizimi (syntax) ile önemli anlamlar içeren karakterleri belitmek için
“ escape (\)” ifadesi kullanmalıyız.
Yine bu tür yerine string içerisinde görünen ifadenin aynısı olduğunu belirtmek için string ifadesininin önüne
“ @ “ işareti konulur.
😊rn:
string s1 = "Hello";
string s2 = "C#";
string S3 = s1 + s2;
😊rn:
string ad = "şerif";
string soyad = "güngör";
string sonuc = ad + " " + soyad;
Console.WriteLine(sonuc);
😊rn:
[code=csharp]
namespace string_tipi
{
class Program
{
static void Main(string[] args)
{
string s1 = "merhaba";
string s2 = ".NET";
string s3 = s1 + " " + s2;
string s4 = "Escape karakterleri \' , \\ ";
string s5 = @"Escape karakterleri ', \ ";
Console.WriteLine(s1);
Console.WriteLine(s2);
Console.WriteLine(s3);
Console.WriteLine(s4);
Console.WriteLine(s5);
Console.ReadLine();
}
}
}
[/code]
Ekran çıktısı:
[img]http://www.dbakademi.com/img/4_charpEgitim.png[/img]
Object Veri Tipi: C# dilinde kullanılan tüm veri tipleri bu Object veri tipinden türemiştir.Yani nesneler birer objecttir ve tüm değerler ,tüm nesneler bu türden bir değişkene atanabilir. Nesnelerin bu türe
dönüştürülmesine
Boxing denir. Diğer türlerin Object nesnesine nasıl atanır aşağıdaki örnekle inceleyelim.
[code=csharp]
namespace object_tipi
{
class Program
{
static void Main(string[] args)
{
object a;
a= 5;
Console.WriteLine(a.GetType());
a = 'A';
Console.WriteLine(a.GetType());
a = 12.5F;
Console.WriteLine(a.GetType());
a = true;
Console.WriteLine(a.GetType());
a = 3.14M;
Console.WriteLine(a.GetType());
Console.ReadLine();
}
}
}
[/code]
Ekran Çıktısı:
[img]http://www.dbakademi.com/img/5_charpEgitim.png[/img]
(Bu örnekte GetType ifadesi mevcuttur. Burada a değişkenimiz CTS’ deki tipini string olarak almaktadır.)
Düzenle Kullanıcı Tarafından 29 Eylül 2017 Cuma 12:06:12(UTC)
| Sebep: Sebep Bildirilmesi