MehmetX.com

Object Reference Not Set To An Instance Of An Object Hatası

15.07.2012 18:35:15 | Okunma Sayisi : 183030 | Yorum Sayisi : 10

Yazılım geliştirirken karşınıza en çok çıkan/çıkacak hatalardan biridir, Object reference not set to an instance of an object hatası.

Hatanın sebebi; NULL olan, referans tipinde bir değişkenin bir üyesine erişmeye çalışmanızdır. Yani sizin bir class' ınız var, bu class' ınızın nesnesi NULL iken, bu class içerisindeki bir üyeye erişmeye çalışıyorsunuz.

Basit bir örnek ile bakacak olursak;
 

Calisan isminde bir class' ımız var.

class Calisan

{

    public string Ad { get; set; }

}

 

ve bir metot içerisinde, Calisan class' ından cls nesnesini tanımladık.

private void button1_Click(object sender, EventArgs e)

{

    Calisan cls = null;

    this.Text = cls.Ad; //runtime hata verecek olan satır

}

 

button click içerisinde cls nesnesinin Ad özelliğini Form' un Text özelliğine eşitlemek istedik, cls nesnesi NULL olduğu için this.Text = cls.Ad; satırında runtime hatası alacağız. Hata mesajı olarak da Object reference not set to an instance of an object verecektir, Türkçe olarak da Nesne başvurusu bir nesnenin örneğine ayarlanmadı.

 

Yukarıdaki basit örnekte cls isimli Calisan nesnesini doğrudan NULL' a eşitledim. Object reference not set to an instance of an object hatası aldığınız, sizin örneğinizde doğrudan NULL' a eşitlenmemiş olacaktır muhtemelen. Bir metottan dönen değere vb. bir eşitleme sonucunda NULL olacaktır.

 

Başka bir örnek;

    Calisan cls = context.Calisans.FirstOrDefault(x => x.Id == 9999);

    string ad = cls.Ad;

 

Veritabanında, Id' si 9999 olan bir Calisan yok ise, FirstOrDefault metodu geriye NULL döndürecektir. Yani cls nesnesi NULL olacaktır ve bir alt satırında cls nesnesinin Ad özelliğinin değerini çekmeye çalıştığımızda Object reference not set to an instance of an object hatası alacaksınız.

Sadece property (özellik)' lerde değil, class içerisindeki herhangi member' a (üyeye) erişmeye çalıştığınızda, üyesine erişmeye çalıştığınız nesne NULL ise Object reference not set to an instance of an object hatasını alırsınız.

Aynı class içerisine Yap isminde bir metot ekledim. Metodun içerisinde neler yapılacağı önemli değil, bu yüzden boş bıraktım.

 

class Calisan

{

    public string Ad { get; set; }

    public void Yap()

    {

       //...

    }

}

 

Form_Load içerisinde Yap metodunu çağırdık ve uygulamayı çalıştırdığımızda Object reference not set to an instance of an object hatasını aldık. Çünkü cls nesnesi NULL ve NULL olan bir nesnenin herhangi bir üyesine erişemeyiz.

 

private void Form1_Load(object sender, EventArgs e)

{

    Calisan cls = null;

    cls.Yap();

}

 

Çözüm olarak;

NULL kontrolü yapmanız gerekir.

 

Property (özellik) örneğinde;

 

private void button1_Click(object sender, EventArgs e)

{

    Calisan cls = null;

    if (cls != null)

    {

        this.Text = cls.Ad;

    }

}

 

Metot örneğinde ise;

 

private void Form1_Load(object sender, EventArgs e)

{

    Calisan cls = null;

    if (cls != null)

    {

        cls.Yap();

    }

}

Yapılan NULL kontrolü tabiki nesnenin NULL kalmasını değiştirmez, sadece runtime' da alacağınız Object reference not set to an instance of an object hatasını engeller. Nesne yine NULL kalmaya devam eder.

 

10 Yorum

M. C. G. 15.07.2012 11:28:23
Hocam, yıllardır yazılım dünyasının içindeyim, bu hatayı milyonlarca kez almışımdır. Demek sebebi buymuş ha? Elleriniz dert görmesin. Yazılarınızın devamını bekliyoruz.
Eray Koçer 15.07.2012 12:36:02
Aylar sonra aramızdasınız hocam nihayet anlatımınız için teşekkürler devamını bekliyoruz kitabıda merak etmedik değiliz :)
Alperen YILMAZ 15.07.2012 14:00:47
Yeni paylaşımı görmeyi uzun zamandır bekliyorduk dönüş her zaman ki gibi kaliteli olmuş ellerinize sağlık. Kitabınız ile ilgili de bir yazı paylaşırsanız sevinirim.
elif ayse 17.07.2012 14:23:52
Mehmet hocam :) welcome back. hergun acaba yeni bir post var mi diye kontrol ediyordum. Geri donmenize ve yeni paylasiminiza cok tesekkur ederim. cok guzel yazi olmus :)
Batuhan Aktaş 19.11.2013 16:21:42
Süpersiniz. Çok teşekkürler.
kursat karabıyık 16.01.2014 23:18:13
hocam ben bu hatayı outlook ta alıyorum ve sürekli beni engelliyor programı kullnamamı bundan nasıl kurtulurum
ali nazik 4.01.2016 17:54:46
hocam elinize sağlık
Yasin 8.03.2016 08:32:32
Hocam ben bunu bı andıroıd program kulanırken acılısta alıyorum bu kod hatası nerde dır kod kısmını nasıl acıcaz tam olarak hedef almamız gereken dosya ısmı nedır bı yardımcı olursanız sevınırım tesekurler
Ercan Eryılmaz 22.03.2016 06:18:00
merhaba bende visual studio 2015 enterprise var. normal çalışıyordu. devexpress kurduktan sonra bozuldu ve bu hatayı vermeye başladı. program ne eski projeleri açıyor ne de yeni proje açabiliyor. hepsinde aynı hatayı veriyor. yeni null mu diye kontrol ettiğim bir yer yokken de aynı hatayı verdi.
salim dal 17.04.2016 10:59:44
evrak tarama ıslemı yaparken bu hatayı alıyorum ne yapmam gerteklı



page-top