MeslekForum Mesleki Gelişim Forumu

Go Back   MeslekForum Mesleki Gelişim Forumu > Bilgisayar Yazılım Donanım > Programlama > C#

Cevapla
 
LinkBack Seçenekler Stil
Alt 12-08-2009, 01:27   #1 (permalink)
Kullanıcı Profili
SITE ADMİN
Taner - ait Kullanıcı Resmi (Avatar)
Kullanıcı Bilgileri
Üyelik Tarihi: Oct 2009
Üye No : 2
Mesajlar: 94
Standart Türler (TYPES) Nelerdir ?

Tür (type) konusundan bahsetmeden önce şunu bilmeniz ve aklınızdan
çıkarmamanızda fayda vardır. C# nesne tabanlı bir dildir ve her şey bir nesnedir. Nesnenin
yapısını da sınıflar oluşturur. (Sınıfları ilerleyen bölümlerimizde inceleyeceğiz.)
C# da tüm sınıflar Object temel sınıfından türemiştir.
Türler C# da ikiye ayrılır: Değer türleri ve referans türleri. Değer türleri ile referans
türleri arasındaki farkı anlamak, C# da değişkenlerin bellek yönetiminin nasıl çalıştığını
anlamak demektir. Değer türleri ve referans türleri aynı zamanda farklı iki bellek bölgesini
anlatmaktadır: Stack ve Heap bellek bölgesi. Dolayısıyla değer türleri Stack bellek bölgesi
ile ilişkili, referans türleri de Heap bellek bölgesi ile ilişkilidir.
Şunu hiçbir zaman unutmamanız gerekir.
Değer türünden bir değişken Stack bellek bölgesinde tutulur, Referans türünden bir
değişkenin kendisi Stack bölgesinde tutulurken temsil ettiği nesne Heap bellek bölgesinde
tutulur.
Referans türlerinin ne anlama geldiğini öğreneceğiz ancak şu anda temel olarak değer
türlerini anlamamız gerekmektedir.
Değer türleri C# da kullanılan int, long, char gibi doğal türlerden oluşmaktadır. Net
içinde tür yönetimi CTS ( Common Ttype System ) tarafından yönetilir. CTS. Net içinde
kullanılan dillerin türlerini, dil bağımsızlığını sağlamak amacıyla ortak bir tür ile gösterir.
Yani siz. Net içinde Visual Basic ya da C# ile program yazdığınızda kullandığınız türler CTS
tarafından ortak bir türe dönüştürülmektedir.

Örneğin;

Visual Basic de kullanılan integer ve C# da kullanılan int türleri .Net içinde
System.Int32 ile gösterilmektedir. Peki, System.Int32 nedir? Ne anlama gelmektedir.

.Net çalışma ortamından her şey Object sınıfından türemiştir. Object sınıfından
türemiş olan ValueType sınıfı, değer türleri için bir temel sınıfı oluşturmaktadır.

Değer türleri de. Net içinde bir yapı olarak ( struct ) tanımlanmışlardır. Dolayısıyla.
Net içinde kullanılan türlerin metotları ve özellikleri vardır.


Resim 1.9: Int32 sınıfının metotları

Eğer Visual Studio içinde boş bir proje oluşturur ve Int32. yazdığımızda Int32
yapısına ait metot ve elamanları görebiliriz. Ancak şu anda biz metot, özellik, veri elemanı
gibi konulara girmiyoruz. Şu anda yabancıyız. Bunlar sınıflar konusunda anlatılacaktır.
Ancak aşağıdaki üç maddeyi unutmamız gerekmektedir.

 C# kullanılan doğal türlerin aslında. Net içinde CTS tarafından diğer. Net dilleri
ile uyumlu olması açısından ortak bir tür ile temsil edildiği,

 C#’da değer türleri ve referans türleri olarak iki türün olduğu,

 Değer ve referans türleri ile bağlantılı stack ve heap denilen iki bellek
bölgesinin olduğu unutulmamalıdır.

Aşağıdaki tabloda C#’da kullanılan türler ve bu türlerin. Net içindeki tanımları
verilmiştir.



Yukarıdaki tabloda gördüğümüz bool veri türü sadece true (doğru) ya da false (yanlış)
değerini almaktadır.
Yani bool türünden bir değişkene sadece true veya false değeri atanmaktadır. Aksi
takdirde derleyici hata verecektir.

Kod:
bool flag;

int a=1;

flag = a;
dediğimizde derleyici “Cannot implicitly convert type int to bool” şeklinde bir hata
mesajı verecektir.

Referans Türleri Nelerdir ?

C#’da türlerin temel iki kısma ayrıldığını söylemiştik. Bunlardan birisi değer türleri (
Value Types ), diğeri de referans türleridir ( Reference Types ).
Referans türleri adres tutan türlerdir. C#’da tüm nesneler referans türündendir.
Dolayısıyla C#’da her şey bir nesne olduğuna göre ve Object sınıfından türetildiğine göre
demek ki C# kullanılan tüm nesneler bir adres belirtirler. Hatırlayacağınız gibi değer türleri
stack bellek bölgesinde tutulurdu. Referans türünden bir değişkenin kendisi stack bölgesinde
tutulurken, nesnenin kendisi heap bellek bölgesinde tutulmaktadır. Yani siz referans
türünden bir değişken tanımladığınızda değişkenin kendisi stack bellek bölgesinde tutulacak
ancak değer olarak nesnenin heap bellek bölgesindeki yerinin adresini tutacaktır.


Resim 1.6: Referans türlerinin hafızadaki durumu

Yukarıdaki şekildeki gibi p referans türünden bir değişkendir ve stack bellek
bölgesinden tutulmaktadır. Ancak p’nin içinde nesnenin kendisi yoktur. Hatırlarsanız değer
türünden bir değişken gerçek değeri tutmaktaydı. p’nin içinde nesnenin heap bellek
bölgesindeki adresi vardır. Peki, niçin böyle tasarlamış olabilir? Yani niçin nesneler heap
bellek bölgesinde tutulmaktadır? Bunun cevabı CLR’ dir.
Çünkü bellek yönetimi CLR ‘nin kontrolü altındadır. Kullanılmayan nesneler CLR
yönetimindeki çöp toplayıcı mekanizma sayesinde (garbage collection ) heap alanından
silinmektedir.
C ve C++’da kullanılan referans gösteren & operatörü C#’da kullanılmamaktadır. Bununla
birlikte göstericilerde C#’da normal olarak kullanılmamaktadır. Ancak bu C# ‘ın göstericileri
desteklemediği anlamına gelmez. C# göstericileri desteklemektedir eğer bir gösterici
kullanmak istiyorsanız o zaman yönetilmeyen kod (unmanaged) yazmak gerekir. Tabi bu
durumda karşımıza farklı bir durum çıkar.
Bellek yönetimi CLR (Common Language Runtime ) yönetimindedir. Heap bellek
bölgesindeki geçersiz durumdaki nesneleri temizlemektedir. Bu yönetilen koddur. Burada
belleğin temizlenmesi, bellekten ayrılan yerlerin geri bırakılması tamamen CLR’nin
yönetimi altındadır. O zaman yönetilmeyen kod yazdığımızda CLR aradan çıkacaktır.
Bellekten ayrılan yerlerin geri bırakılması programcıya kalacaktır.
Referans türleri için heap bellek bölgesinde yer ayrımı yapıldıktan sonra geriye adres
dönülmektedir. Bu adreste referans türünden bir değişkene atanmaktadır.

Bu ana kadar incelediklerimize göre:

İki tane temel tür vardır: Değer türleri ve referans türleri. Tüm doğal türler değer
türüdür ve stack bellek bölgesinde tutulmaktadır. Tüm nesneler ise referans türündendir.
Referans değişkenleri, nesnenin heap bellek bölgesindeki adresini tutmaktadır ve referans
değişkenleri de stack bellek bölgesinde bulunmaktadır.

Kaynak : MEGEP | Nesne Tabanlı Programlama 1
__________________
Beni Sevmek İçin Programlanma Devrelerini Yakarım !
Taner isimli Üye şimdilik offline konumundadır  
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Spurl this Post!Reddit! Wong this Post!
Alıntı ile Cevapla
Cevapla

Etiketler
c# değişken türleri, c# değişkenleri, c# double, c# int, c# stack ve heap, c# string, c# veri türleri

Seçenekler
Stil

Yetkileriniz
Konu Acma Yetkiniz Yok
Cevap Yazma Yetkiniz Yok
Eklenti Yükleme Yetkiniz Yok
Mesajınızı Değiştirme Yetkiniz Yok

BB code is Açık
Smileler Açık
[IMG] Kodları Açık
HTML-Kodu Kapalı
Trackbacks are Açık
Pingbacks are Açık
Refbacks are Açık



Tüm Zamanlar GMT +3 Olarak Ayarlanmış. Şuanki Zaman: 17:18.


Powered by vBulletin
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.3.2

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30