C# Null Kavramı

  • 297
  • (1)
  • (5)
  • 22 May 2021

Eğer null kavramını anlamak istiyorsanız Nesne Yönelimli Programlama yani Object Oriented Programming kavramının ne olduğunu bilmeniz gerekiyor.

Bilgisayar üzerinde çalışan işlemlerde iki çeşit değişken tipi olduğu söylenebilir. Bunlardan biri değer tipi, diğeri ise referans tipidir. Değer tipleri yordamsal programlama türünden kalan ve her zaman kullanılan tiplerdir. Referans tipleri ise soyutlanmış bileşenlerin birer örnekleridir.

Nesne yönelimli programlamanın en temel özelliği Abstraction yani Soyutlama özelliğidir. Birden fazla bileşeni olan veri türlerini işlemek için kullanılabilir en elverişli yöntemdir. Örneğin, hasta kayıtlarını veri olarak işlemek istediğinizi düşünün. Hastanın adı, soyadı, hastalığı, kullandığı ilaçlar, sisteme giriş tarihi, taburcu olduğu tarih ve oda numarası gibi çeşitli verileri tek bir veri türü içerisinde sınıflar (class) yardımı ile toplayabiliriz. Bu bileşenlerin her biri değer tipidir ve RAM' in stack bölgesinde tutulur. Ancak bu bileşenlerden oluşan veri tipi bütünü ise referans tipidir ve RAM üzerinde heap bölgesinde tutulur. Bu referans tipine ait verinin heap üzerinde hangi adreste tutulduğu ise yine stack bölgesinde tutulmaktadır.

stack heap nesne yönelimli programlama

Stack bölgesi üzerinde bulunan bir referans tipi verinin, heap bölgesindeki karşılığının tamamen boş olması o verinin null olduğu anlamına gelmektedir. Yani içerisinde herhangi bir değeri olmayan veridir. Değer tiplerine ait verilerin default birer verileri vardır. Örneğin int için 0 (sıfır) değeri default olarak gelmektedir. Referans türü veriler için bu değer null olarak gelir.


public class Hasta
{
    public string Ad { get; set; }
    public string Soyad { get; set; }
    public string Teshis { get; set; }
    public string Oda { get; set; }
    public List<Ilac> Ilaclar { get; set; }
}

public class Ilac
{
    public string Ad { get; set; }
    public string Marka { get; set; }
    public string Firma { get; set; }
    public double Doz { get; set; }
}

Yukarıda tanımlı iki adet referans veri türü aşağıdaki gibi kullanılırsa,



Hasta veri_hasta; // veri_hasta' ya herhangi bir atama yapılmadığı için değeri null olacaktır.
// bunun yerine

Hasta veri_hasta = new Hasta(); // bu şekilde tanımlandığı zaman heap bölgesinde yeri tanımlı ve dolu olacaktır.

// ancak Ilaclar da bir referans türü olduğu için null değeri ile gelecektir.

if (veri_hasta.Ilaclar == null) Console.WriteLine("ilaçlar null");

veri_hasta.Ilaclar = new List<Ilac>();

// diğer string değerleri ise default olarak null gelmektedir.


Hasta türünde bir veri tanımlandığı zaman Ilaclar listesinin null gelmemesi için Hasta veri türüne Constructor bir metot tanımlanabilir.


public class Hasta
{
    public string Ad { get; set; }
    public string Soyad { get; set; }
    public string Teshis { get; set; }
    public string Oda { get; set; }
    public List<Ilac> Ilaclar { get; set; }
    
    public Hasta()
    {
        Ilaclar = new List<Ilac>(); // bu sayede her tanımlanan Hasta türünde Ilaclar null gelmeyecektir.
    }
}

public class Ilac
{
    public string Ad { get; set; }
    public string Marka { get; set; }
    public string Firma { get; set; }
    public double Doz { get; set; }
}

Eğer diğer değerlerin (Ad, Soyad, Teshis) bir başlangıç değeri almasını istiyorsanız, o değerlere de Constructor metot içerisinde bir ilk atama yapabilirsiniz.

İlişkili İçerikler

OOP (Object Oriented Programming) Nesne yönelimli programlamanın temelini oluşturan sınıfları inceleyebilirsiniz.

Paylaşın
Etiket Bulutu