Jump to content

Namespace Nedir, Value Ve Reference Type'larin Ned


wmismail

Recommended Posts

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

Archived

This topic is now archived and is closed to further replies.

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...