-

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

7/15/2012 6:35:15 PM
Okunma Sayısı:54525

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.

 

Paylaş
SonrakiMakale

Yorumlar

Mahmut Can Göteri 7/15/2012 11:28:23 AM

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 7/15/2012 12:36:02 PM

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 7/15/2012 2:00:47 PM

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 7/17/2012 2:23:52 PM

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ş 11/19/2013 4:21:42 PM

Süpersiniz. Çok teşekkürler.

kursat karabıyık 1/16/2014 11:18:13 PM

hocam ben bu hatayı outlook ta alıyorum ve sürekli beni engelliyor programı kullnamamı bundan nasıl kurtulurum

Yorum Yaz

Ad Soyad

E-Posta 

Yorum




page-top