Namespace Nedir, Value ve Reference Type'ların Nedir?

St.AnGeR

Document Visor..
Katılım
17 Haz 2005
Mesajlar
1,832
Reaction score
0
Puanları
0
Konum
ιѕт              HHuser№: 9          Remote Admi
Namespace Nedir, Value ve Reference Type'ların Nedir?



Bu makalemizde Namespace, Value ve Reference Type’lerin .net ortamında nasıl kullanılacağını göreceğiz.



Namespaces



Diğer .Net dilleri gibi C#’ta .NET base class library’sinde tanımlanmış datatype’ları kullanır. Bu classlar namespace adı altında gruplanmıştır. Namespace’e diğer bir tanımlama ile classları kullanırken fonksiyonel bir şekilde ulaşmamızı sağlayan logic containerlar diyebiliriz. Örnek olarak System.Windows.Forms namespace’i ni verebilirim

Kod:
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 classları projemize dajil etmiş oluruz.. namespace using ile projeye dahil edildikten sonra herhangi bir period belirtmeden namespace içerisinde bulunan tanımlamalara ulaşabiliriz.

Kod:
using Desta.Deneme.DenemeClasses;

böylece deneme namespace içindeki tüm classlara ve içinde bulunan property ve fonksiyonlara erişebiliriz.

using ile compile işlemi sırasında modüller arasında herhangi bir link tanımlamış olmayız.

using ile ilgili ilginç bir şey ise onu alias type tanımlamak için kullanabilmemiz. Aşağıdaki örnek System.Int32 type’ını intecir adıyla kullanmamızı sağlar.

Kod:
         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 tarafından desteklenmesi kaçınılmaz olan bir çok datatype’ı tanımlayan zengin bir library’e sahiptir. Bu libraryde bulunan Boolean, string, integer, kronolojik ve finansal valueların hepsi System namespace’inin içerisinde yer alır.

Bütün typelar object type’ından inherit edilir. Böylece bir object’in referansı herhangi bir tipdeki değişkeni tutmak için kullanılabilir.

Long type’ın bit olarak büyüklüğü 64’e çıkarılmıştır. Bu sayede Whistler ve XP platformlarında 64 bitlik programlar için bir hazırlık sağlanmıştır. (64 bitlik olan bu işletim sistemleri Intel’in yeni nesil 64 bitlik işlemcisi Itanium uyumludur)

System NameSpace i birçok alt kullanıcı barındırır.



System.Web

HTML ve Web kontrollerini ,güvenlik, sessionstate, konfigurasyon, bölgesel ayarlar gibi metodları barındırır.



System.Data

Genel olarak veritabanı işlemlerimiz için kullandığımız NameSpace'dir.



System.Windows.Forms

Windows Forms uygulamaları için özel ayarları barındırır.



System.Drawing

Yazdırma ve resim işleme ile ilgili işlemlerde kullandığımız NameSpace'dir.



System.XML

XML işlemleri için kullanılmktadır.



şüphesiz .Net Framework ün bize sunduğu bu zengin kütüphane System NameSpace'i ile sınırlı değil.



Value ve Reference Tipleri

C# programlama dilinde bildiğiniz gibi veri türlerini Reference Types Value Types olmak üzere iki kısma ayırıyoruz.

.NET dilleri tarafından kullanılan yada yaratılan her class value ve referans tipleri olarak kategorilendirilebilir. Value ve referans tipleri iki belirgin farklılık gösterir : hafızada tutuldukları yerler ve atama işlemi içeriklerdeki davranışlarına göre.

Value tipler stackte tutulur, her iki value değeri için yapılmış atama işlemi ile hafızada birbirinin kopyası iki bölüm oluşturulur. Referans tipler ise heap’de tutulur. Her iki referans değeri için yapılmış atama işlemi ile memory’deki tek bir yere iki ayrı referans oluşturulur.



Aşağıdaki kod parçasında bir referans türüne ve bir de değer türüne null değerler atanmaya çalışılmaktadır.

Kod:
using System;

 

namespace c1

{

    class c1

    {

        static void Main(string[] args)

        {

            string refTuru=null;

            int dTuru=null;

        }

    }

}
Bu uygulamayı derlemeye çalıştığımızda Cannot convert null to 'int' because it is a value type hatasını alırız. Aynı durumu kendi tanımladığımız referans ve değer türleri içinde gerçekleştirebiliriz. Aşağıdaki kod parçasında bu durum örneklenmiştir.

Kod:
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 aynı hatayı alırız. Çünkü struct' lar değer türüdür ve bu sebeple null değerler alamazlar. Oysaki aynı istisnai durum class gibi kendi tanımlamış olduğumuz referans türleri için geçerli değildir. Peki değer türlerinin null değer içerme ihtiyacı ne zaman doğabilir? Bir veritabanı uygulamasını göz önüne alalım. Bu tabloda int, double gibi değer türlerine karşılık gelecek alanların var olduğunu düşünelim. Veri girişi sırasında bu int ve double değişkenleri null olarak tabloya aktarmak isteyebiliriz. Ya da tablodan veri çekerken, değer türü karşılığı alanların null değer içerip içermediğini anlamak isteyebiliriz. İşte bu gibi durumlarda değer türlerinin null veriler içerebilecek yapıda olması, kodumuzun ölçeklenebilirliğini arttıracak bir yetkinlik olarak düşünülebilir. Veritabanları 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 taşıyabileceğini incelemeye çalışalım. Değer türlerinin C# 2.0 için iki versiyonu vardır. 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 kullanılır.

Kod:
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;

        }

    }

}

Yukarıdaki kod parçası sorunsuz olarak derlenecek ve çalışacaktır

Aşağıdaki kod ile iki value değerine atama yapılmakta ve hafızada iki değer kopyası oluşturulmaktadır. (kodu derleyip çalıştırmak için /unsafe switch’ini kullanın)

Kod:
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 aynı");                 

         }                 

         else              

         {                 

         Console.WriteLine("i ve j'nin adresleri farklı");                

         }        

}        

Console.ReadLine();  

return 0;       

}

}
Bu kod ise iki referans değerine atama yapmakta ve hafızadaki tek kopyaya ulaşmaktadır.

Kod:
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 aynı adreste");                                

         }                 

         else              

         {                 

         Console.WriteLine("i ve j farklı adreste");            

         }        

}        

Console.ReadLine();  

return 0;       

}

}
Primitives olarak adlandırılan pek çok değişken tipi C#’da value tipi olarak kabul edilir : integer value tipi gibi. Aynı zamanda struct ile tanımlamanan user tipler’de value tipinde tanımlamalardır.
 
Geri
Üst