Yapıcı ve Yıkıcı Metotlar

 

 Oluşturduğumuz nesnelere değer atamalarını uygulama içerisinde verebildiğimiz gibi, bazı durumlarda bir takım değer atamalarını, ayarlamaları ilk oluşma anında yapmamız gerekebilir. Aynı şekilde nesne ile işimiz bittiğinde son olarak yapmak istediğimiz kontroller de olabilir.

       Bu gibi durumlar için otomatik olarak çalışan dinamik metotlar bulunmaktadır.

Yapıcı Metotlar(Constructors)

       Nesnenin ilk oluşturulma anında çalışan metot tipidir. Sınıf adıyla aynı isimde olmalıdır ve herhangi bir dönüş (return) tipi almamaktadır.Yapıcı metotlar parametre alabilirler ve aşırı yükleme (overloading) yapılabilir. Yapıcı metotların nasıl çalıştığını ve tanımlandığını görebileceğimiz basit bir örnek yapalım.

       Öncelikle yapıcı metodu olan bir Öğrenci sınıfı oluşturalım.

public class Ogrenci
    {
        public Ogrenci()
        {
            Console.WriteLine("Yapıcı metot çalıştı.");
        }

        public string Adi { get; set; }
        public string Soyadi { get; set; }
        public int Numara { get; set; }
        public double Ortalama { get; set; }
    }

       Uygulamamızın main metodunu aşağıdaki gibi düzenleyelim;

static void Main(string[] args)
        {
            Console.WriteLine("Uygulama başladı.");
            Ogrenci yeniOgrenci = new Ogrenci();
            Console.WriteLine("Öğrenci nesnesi oluştu.");

            Console.WriteLine("Uygulama bitti.");
        }

       Uygulamamızın çıktısı aşağıdaki gibi olacaktır.

Yıkıcı Metotlar(Destructors)

       Yıkıcı metotlar, nesne’ye ihtiyacın kalmadığı zaman son olarak çalışan metot tipidir. Yıkıcı metotlar da yapıcı metotlar gibi sınıf ile aynı isimde olmalı ve yapıcı metotlardan farklı olarak sadece “~” işareti ile beraber isim ile yazılmaktadır. Yıkıcı metotlarda aşırı yükleme(overloading)  ve kalıtım alma işlemi yapılamaz.

       Yukarıda kullanmış olduğumuz Öğrenci sınıfına yıkıcı metot ekleyerek devam edelim;

public class Ogrenci
    {
        public Ogrenci()
        {
            Console.WriteLine("Yapıcı metot çalıştı.");
        }

        public string Adi { get; set; }
        public string Soyadi { get; set; }
        public int Numara { get; set; }
        public double Ortalama { get; set; }

        ~Ogrenci()
        {
            Console.WriteLine("Yıkıcı metot çalıştı.");
        }
    }

       Main fonksiyonuzu aşağıdaki gibi düzenliyoruz;

static void Main(string[] args)
        {
            Console.WriteLine("Uygulama başladı.");
            Ogrenci yeniOgrenci = new Ogrenci();
            Console.WriteLine("Öğrenci nesnesi oluştu.");
            
            Console.WriteLine("Uygulama bitti.");
        }

       Uygulamayı çalıştırdığımızda aşağıdaki sonucu göreceğiz.

      Burada yıkıcı metodumuz “uygulama bitti.” Yazımızdan da sonra çalıştı. Bunun sebebi, oluşturduğumuz yeniOgrenci nesnemiz Main metodu içerisinde geçerli bir nesne. Main nesnesi devam ettiği sürece,bellek alanındaki yerini korumaktadır. Aynı şekilde eğer Ogrenci sınıfımızdan kalıtımımızı başka bir metot içerisinde almış olsaydık, yıkıcı metodumuz içerisinde bulunduğu fonksiyon bittikten sonra çalışacaktı. Burada da main fonksiyonumuz tamamlandıktan sonra yıkıcı metodumuz çalışmış oldu ve ekrana en son kendisine ait mesajı yazdı.

Add comment