7 Şubat 2018 Çarşamba

C# Boş Bırakılabilen Tipler (Nullable Types)


Merhaba,

Bu yazıda sizlere C#'ta boş bırakılabilen tiplerden (Nullable Types) bahsedeceğim.

Program yazarken içeriği boş olabilecek değişkenlere sıklıkla ihtiyaç duyacaksınız. Örneğin; bir okul programında öğrenci bilgilerini kaydettiğimizi düşünelim. Ad, soyad, numara, adres, boy, kilo gibi alanlarımız olsun. Bir öğrencinin her zaman bütün bilgileri dolu olmayabilir. Örneğin boy, kilo gibi bilgileri o anda verilmemiş olabilir. Dolayısıyla bu alanlar boş bırakılacaktır. Daha önceleri boş bırakılamayan tipler sebebiyle bunu yönetmek zahmetli bir işti ama C# 2.0 ile birlikte bu konu zarif bir biçimde çözümlenmiştir. Boş bırakılabilen (Nullable Types) sayesinde bu sorun kolayca yönetilebilmektedir.

Normalde aşağıdaki kod parçası derlenmeyecektir

int i = null; //Hata!! i boş olamaz. (Boş bırakılamayan tip) bool b = null; //Hata!! b boş olamaz. (Boş bırakılamayan tip)

Fakat aşağıda bu tipleri nasıl boş bırakabileceğimizi göreceğiz.

Boş bırakılabilen tipler System.Nullable < T > nesnesidir. T bir değer tipi olmak zorundadır. İki şekilde deklarasyon olabilir

System.Nullable< int > i = null; System.Nullable< bool > b = null veya int? i = null; //Boş bırakılabilen tip bool? b = null; //Boş bırakılabilen tip

Genellikle ikinci deklarasyon daha çok tercih edilir. Program şimdi derlenecektir.

Boş bırakılabilen tiplerin boş bırakılabilmesi özelliği dışında bütün özellikleri boş bırakılamayan tiplerle aynıdır. Boş bırakılabilen bir tipin değer atanmış olup olmadığını iki şekilde anlayabiliriz. Birincisi null kontrolü yapılarak, ikincisi HasValue özelliğini kullanarak. HasValue kontrolü daha yaygın kullanılmakla birlikte daha şık bir kullanımdır.

Alın size bir örnek:

using System; class NullableTypesDemo { static void Main() { int? i = null; if (i.HasValue) Console.WriteLine("i bir değere sahip: " + i.Value); else Console.WriteLine("i boş"); i = 10; if (i.HasValue) Console.WriteLine("i bir değere sahip: " + i.Value); else Console.WriteLine("i boş"); } }

Bu programın çıktısı aşağıdaki gibi olacaktır:

i boş 
i bir değere sahip: 10

Bir nullable değişken ile normal değer değişkeni toplandığında değer yine null olacaktır.

Aşağıda bunu gösteren bir örnek vardır:

using System; class NullableTypesDemo { static void Main() { int? a = null; int? sonuc = null; int b = 10;//Dikkat!! Burası nullable değil sonuc = a + b; if (sonuc.HasValue) Console.WriteLine("Sonuc: " + sonuc.Value); else Console.WriteLine("Değer boş!"); a = 100; sonuc = a + b; if (sonuc.HasValue) Console.WriteLine("Sonuc: " + sonuc.Value); else Console.WriteLine("Değer boş!"); Console.Read(); } }

Bu programın çıktısı aşağıdaki gibi olacaktır:

Değer boş!
Sonuc: 110

Görüldüğü gibi değeri null olan bir nullable değişken ile değeri null olmayan int tipinde bir değişken toplandığında değer yine null olmaktadır.

Boş bırakılabilen tipler yalnızca değer tiplerine uygulanabilir.

Aşağıdaki ifade geçerli değildir:

class A {} static void Main(){ A? a = null; //Hata!! A nesnesi nullable olamaz }

Umarım faydalı olabilmişimdir..

Bir sonraki makalede görüşmek üzere..




Paylaş:

0 yorum:

Yorum Gönder

Bu Blogda Ara