namespace _04_Constructors
{
/// <summary>
/// Ankara, İstanbul (Avrupa), İstanbul (Anadolu) ve İzmir için Türkiye Cumhuriyeti vatandaş verilerini tutan sınıf.
/// </summary>
class Vatandas
{
public string Adi { get; set; } // property
public string Soyadi { get; set; } // property
public string Ulke { get; } // property, Ulke özelliği her vatandaş için default contructor'da Türkiye Cumhuriyeti set edileceğinden
// class içerisindeki herhangi bir method ve oluşturulan obje üzerinden değiştirilmemesi için getter ile
// readonly (sadece okunur) yapıyoruz,
// eğer değiştirilme ihtimalı varsa setter da yazılarak readonly yapılmayabilir
public string Sehir { get; set; } // property
public Vatandas() // default (parametresiz) constructor
{
Ulke = "Türkiye Cumhuriyeti"; // örneğimiz T.C. vatandaşları için olduğundan her new'lenen obje için Ulke atamasını Türkiye Cumhuriyeti yapıyoruz
// Adi, Soyadi ve Sehir özelliklerinin veri tipi string olduğundan obje new'lendiğinde referans tip olmalarından dolayı bu özelliklere null atanacaktır
// ve bu da bu özellikler üzerinden başka string özellikleri (Length gibi) veya methodları (Trim gibi) kullandığımızda Null Reference Exception hatası
// almamıza sebep olabilir.
// Bu hatanın önüne geçebilmek için istenirse bu özelliklere içerisinde hiç bir karakter olmayan string değer atanabilir.
Adi = "";
Soyadi = "";
Sehir = "";
// class'ta kullanılan özellik ve alan tipleri için constructor'da herhangi bir atama yapılmazsa sayısal değer tipler için
// (long, int, short, byte, double, float, decimal) 0, enum değer tipler için ilk elemanın sayısal değeri, boolean değer tip için false ve
// DateTime struct değer tip içinse 01.01.0001 atanır.
// string, array, class ve class'la birlikte kullanılan interface ve kalıtım base class'ları (sonraki konularda anlatılacak)
// referans tipler için null atanır.
}
public string UlkeVeSehirGetir() // behavior
{
return $"Ülke / Şehir: {Ulke} / {Sehir}";
}
}
}