wmismail Posted August 10, 2008 Share Posted August 10, 2008 Namespace Nedir, Value ve Reference Type'larin Nedir? Merhaba arkadaşlar Bu makalemizde Namespace, Value ve Reference Type’lerin .net ortaminda nasıl kullanılacağını görecegiz. Namespaces Diger .Net dilleri gibi C#’ta .NET base class library’sinde tanimlanmis datatype’lari kullanir. Bu classlar namespace adi altinda gruplanmistir. Namespace’e diger bir tanimlama ile classlari kullanirken fonksiyonel bir sekilde ulasmamizi sağlayan logic containerlar diyebiliriz. Örnek olarak System.Windows.Forms namespace’i ni verebilirim namespace Desta.Deneme.DenemeClasses { public class a() { Public a(){} private string dbname; public string dbName { Get{return dbname;} Set{dbname=value;} } } } using kelimesi ile de namespaceler içerisinde bulunan classlari projemize dajil etmis oluruz.. namespace using ile projeye dahil edildikten sonra herhangi bir period belirtmeden namespace içerisinde bulunan tanimlamalara ulasabiliriz. using Desta.Deneme.DenemeClasses; böylece deneme namespace içindeki tüm classlara ve içinde bulunan property ve fonksiyonlara erisebiliriz. using ile compile işlemi sirasinda modüller arasinda herhangi bir link tanimlamis olmayiz. using ile ilgili ilginç bir şey ise onu alias type tanimlamak için kullanabilmemiz. Asagidaki örnek System.Int32 type’ini intecir adiyla kullanmamizi saglar. using intecir=System.Int32; public class AliasOrnek { public static intecir Main() { intecir i=1; intecir j=i+1; System.Console.WriteLine(j); return 0; } } System Namespace Common Laguage Specification (CLS) bir programlama dili tarafindan desteklenmesi kaçinilmaz olan bir çok datatype’i tanimlayan zengin bir library’e sahiptir. Bu libraryde bulunan Boolean, string, integer, kronolojik ve finansal valuelarin hepsi System namespace’inin içerisinde yer alır. Bütün typelar object type’indan inherit edilir. Böylece bir object’in referansi herhangi bir tipdeki degiskeni tutmak için kullanilabilir. Long type’in bit olarak büyüklügü 64’e çikarilmistir. Bu sayede Whistler ve XP platformlarinda 64 bitlik programlar için bir hazirlik saglanmistir. (64 bitlik olan bu isletim sistemleri Intel’in yeni nesil 64 bitlik işlemcisi Itanium uyumludur) System NameSpace i birçok alt kullanici barindirir. System.Web HTML ve Web kontrollerini ,güvenlik, sessionstate, konfigurasyon, bölgesel ayarlar gibi metodlari barindirir. System.Data Genel olarak veritabanı işlemlerimiz için kullandigimiz NameSpace'dir. System.Windows.Forms Windows Forms uygulamalari için özel ayarlari barindirir. System.Drawing Yazdirma ve resim işleme ile ilgili işlemlerde kullandigimiz NameSpace'dir. System.XML XML işlemleri için kullanilmktadir. süphesiz .Net Framework ün bize sundugu bu zengin kütüphane System NameSpace'i ile sinirli degil. Value ve Reference Tipleri C# programlama dilinde bildiginiz gibi veri türlerini Reference Types Value Types olmak üzere iki kisma ayiriyoruz. .NET dilleri tarafindan kullanilan yada yaratilan her class value ve referans tipleri olarak kategorilendirilebilir. Value ve referans tipleri iki belirgin farklılik gösterir : hafizada tutulduklari yerler ve atama işlemi içeriklerdeki davranislarina göre. Value tipler stackte tutulur, her iki value değeri için yapilmis atama işlemi ile hafizada birbirinin kopyasi iki bölüm olusturulur. Referans tipler ise heap’de tutulur. Her iki referans değeri için yapilmis atama işlemi ile memory’deki tek bir yere iki ayri referans olusturulur. Asagidaki kod parçasında bir referans türüne ve bir de değer türüne null değerler atanmaya çalisilmaktadir. using System; namespace c1 { class c1 { static void Main(string[] args) { string refTuru=null; int dTuru=null; } } } Bu uygulamayi derlemeye çalistigimizda Cannot convert null to 'int' because it is a value type hatasini alıriz. Ayni durumu kendi tanimladığımız referans ve değer türleri içinde gerçeklestirebiliriz. Asagidaki kod parçasında bu durum örneklenmiştir. using System; namespace c2 { class c2 { } struct Dvd { } class C1 { static void Main(string[] args) { Kitap kitap=null; Dvd dvd=null; } } } Bu kod parçasındada ayni hatayi alıriz. Çünkü struct' lar değer türüdür ve bu sebeple null değerler alamazlar. Oysaki ayni istisnai durum class gibi kendi tanimlamis oldugumuz referans türleri için geçerli degildir. Peki değer türlerinin null değer içerme ihtiyaci ne zaman dogabilir? Bir veritabanı uygulamasini göz önüne alalim. Bu tabloda int, double gibi değer türlerine karsilik gelecek alanlarin var oldugunu düsünelim. Veri girişi sirasinda bu int ve double degiskenleri null olarak tabloya aktarmak isteyebiliriz. Ya da tablodan veri çekerken, değer türü karsiligi alanlarin null değer içerip içermedigini anlamak isteyebiliriz. işte bu gibi durumlarda değer türlerinin null veriler içerebilecek yapida olmasi, kodumuzun ölçeklenebilirligini arttiracak bir yetkinlik olarak düsünülebilir. Veritabanlari için geçerli olan bu senaryoyu göz önüne almadan önce C# 2.0 için değer türlerinin nasıl null veriler tasiyabilecegini incelemeye çalisalim. değer türlerinin C# 2.0 için iki versiyonu vardir. Nullable değer türleri ve Non-Nullable değer türleri. Bir değer türünün null değerler içerecek tipte olacağını belirtmek için ? tip belirleyicisi kullanilir. using System; using System.Collections.Generic; using System.Text; namespace TestOfNullableValues { class P { static void Main(string[] args) { int? maas; double? pi; maas = null; pi = null; } } } Yukaridaki kod parçasi sorunsuz olarak derlenecek ve çalisacaktir Asagidaki kod ile iki value değerine atama yapılmakta ve hafizada iki değer kopyasi olusturulmaktadir. (kodu derleyip çalistirmak için /unsafe switch’ini kullanin) using System; public class Simpleclass { public static int Main() { int i; int j; i=5; j=i; Console.WriteLine("i="+i); Console.WriteLine("j="+j); unsafe { if (&i==&j) { Console.WriteLine("i ve j'nin adresleri ayni"); } else { Console.WriteLine("i ve j'nin adresleri farklı"); } } Console.ReadLine(); return 0; } } Bu kod ise iki referans değerine atama yapmakta ve hafizadaki tek kopyaya ulaşmaktadır. using System; public class ReferenceType { public int MyValue; } public class SimpleClass { public static int Main() { ReferenceType i; ReferenceType j; i=new ReferenceType(); i.MyValue=5; j=i; Console.WriteLine("i.MyValue="+i.MyValue); Console.WriteLine("j.MyValue="+j.MyValue); unsafe { if (i==j) { Console.WriteLine("i ve j ayni adreste"); } else { Console.WriteLine("i ve j farklı adreste"); } } Console.ReadLine(); return 0; } } Primitives olarak adlandirilan pek çok degisken tipi C#’da value tipi olarak kabul edilir : integer value tipi gibi. Ayni zamanda struct ile tanimlamanan user tipler’de value tipinde tanimlamalardir. Bir sonraki makalemde görüşmek üzere Sem Göksu Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.