Clear        


                
                    using _04_Constructors.Demos.OgrenciGercekProje;
using _04_Constructors.Demos.ZamanIslemleri;

namespace _04_Constructors
{
    internal class Program
    {
        // Constructor'lar (inşa edici) bir class new'lendiğinde (initialization) çalışan class adına sahip ve genelde başına public yazılan özel methodlardır.
        // Constructor'lar parametresiz (default constructor) veya parametreli kullanılabilir, default constructor'ları yazmak zorunlu değildir
        // çünkü oluşturulan class içerisinde mevcuttur.
        // Ancak bir class'a parametreli constructor yazılırsa ve default constructor da kullanılmak istenirse o zaman default constructor yazılmalıdır.
        // Parametreli constructor'lar dependency injection (ilerki konularda anlatılacak) veya her zaman şart olmasa da constructor üzerinden daha kolay ve hızlı şekilde
        // obje oluşturmak için kullanılır.

        static void Main(string[] args)
        {
            #region Default Constructor'lı Vatandas Sınıfı
            Vatandas vatandas1 = new Vatandas(); // default constructor üzerinden obje oluşturuyoruz, default constructor'daki kod bloğu çalışacak

            Console.WriteLine(vatandas1.Ulke); // örnek için default constructor'da atanan Ulke özelliğini yazdırıyoruz

            Console.WriteLine(vatandas1.Sehir); // örnek için default constructor'da Sehir özelliği Adi ve Soyadi özelliklerinde olduğu gibi "" atandığından konsola "" yazdırılacak

            // ilk vatandas objemizin özelliklerini objeyi oluşturduktan sonra set ediyoruz
            vatandas1.Sehir = "Ankara";
            vatandas1.Adi = "Çağıl";
            vatandas1.Soyadi = "Alsaç";
            
            // ilk vatandaş objemizi ekrana yazdırıyoruz
            Console.WriteLine("Adı: " + vatandas1.Adi + " " + vatandas1.Soyadi);
            Console.WriteLine(vatandas1.UlkeVeSehirGetir());



            Console.WriteLine();



            Vatandas vatandas2 = new Vatandas() // ikinci vatandaş objemizi new'lerken özelliklerini set ediyoruz, yine default constructor'daki kod bloğu çalışacak,
                                                // Ulke özelliğini set edemeyiz çünkü getter üzerinden readonly (sadece okunur) yaptık
            {
                Adi = "Luna",
                Soyadi = "Alsaç",
                Sehir = "İzmir"
            };

            // ikinci vatandaş objemizi ekrana yazdırıyoruz
            Console.WriteLine("Adı: " + vatandas2.Adi + " " + vatandas2.Soyadi);
            Console.WriteLine(vatandas2.UlkeVeSehirGetir());
            #endregion



            Console.WriteLine();



            #region Parametreli ve Default Constructor'lı Constructor Overload Yapılan Ogrenci Sınıfı
            Ogrenci ogrenci1 = new Ogrenci("Leo", "Alsaç", 100, 90, 80); // parametreli constructor üzerinden obje oluşturuyoruz,
                                                                         // kullandığımız imzaya sahip constructor kod bloğu çalışacak

            // ilk öğrenciyi ortalama ve durumunu hesaplatarak ekrana yazdırıyoruz
            ogrenci1.OrtalamaVeDurumHesapla();
            Console.WriteLine(ogrenci1.Getir());

            Console.WriteLine();

            Ogrenci ogrenci2 = new Ogrenci(10, 40, 70) // parametreli constructor üzerinden obje oluşturuyoruz,
                                                       // kullandığımız imzaya sahip constructor kod bloğu çalışacak,
                                                       // özellikleri objeyi oluştururken atıyoruz
            {
                Adi = "Angel",
                Soyadi = "Alsaç"
            };

            // ikinci öğrenciyi ortalama ve durumunu hesaplatarak ekrana yazdırıyoruz
            ogrenci2.OrtalamaVeDurumHesapla();
            Console.WriteLine(ogrenci2.Getir());

            Console.WriteLine();

            Ogrenci ogrenci3 = new Ogrenci("Çağıl", "Alsaç"); // parametreli constructor üzerinden obje oluşturuyoruz,
                                                              // kullandığımız imzaya sahip constructor kod bloğu çalışacak

            // üçüncü öğrenciyi devamsız olduğu için ortalama ve durumunu hesaplatmadan ekrana yazdırıyoruz
            Console.WriteLine(ogrenci3.Getir());
            #endregion



            #region Demos
            TimeOperationsDemo.Calistir();
            OgrenciDemo.Calistir();
            #endregion
        }
    }
}