Makale Özeti

Namespace, Value ve Referans Typeların Kullanımı

Makale

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.Winforms namespace’i Winform applikasyonları için gerekli kontrol ve classları içerir.

            Genellikle namespace’deki ilk kelime class’ın geliştirildiği organizasyonun adı olur. Farklı bir vendor’un verdiği isimlerle aynı programda kullanıldığında herhangi bir olası isim benzerliğini engellemek içinse namespacelerde genellikle uzun tanımlamalar kullanılır.

            namespace Netron.Otomasyon.OtomasyonClasses
           
{
                       
//class tanımlamaları
            }

             using keyword’ü ile de namespaceler içerisinde bulunan classları çalışmamıza çekeriz. namespace using keyword’ü ile çekildikten sonra artık herhangi bir period belirtmeden namespace içerisinde bulunan tanımlamalara ulaşabiliriz.

             using Netron.Otomasyon.OtomasyonClasses;

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

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

             using MyInteger=System.Int32;
            
public class AliasOrnek
           
{
                       
public static MyInteger Main()
                       
{
                       
            MyInteger i=1;
                       
            MyInteger 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)

Value ve Referans Tipleri

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

            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 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)

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 jnin adresleri aynı");
           
      }
           
      else
           
      {
              
      Console.WriteLine("i ve jnin adresleri farklı");
           
      }
           
}
           
Console.ReadLine();
           
return 0;
     
}
}    

            Bu kod ise iki referans değerine atama yapmakta ve hafızadaki 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 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.

            Bu yazımızda Value type ve referans type değişken tanımlamalarından ve namespace kavramından bahsettik. Bir sonraki yazımızda bir programcı için kullanımı kaçınılmaz olan yapılar üzerinde duracağız: for, if,case, do while gibi yapıların kullanımının yanısıra Exception kavramından bahsedeceğiz.

            Görüşmek üzere...

            Oğuzhan ÖRDE
            MCSD,MCDBA,MCP,MCT,ATECH