C# dilinde kalıtım/miras alma özelliğinin kullanımına devam ediyoruz…
public class BaseClass { public int id { get; set; } public string referansKod { get; set; } public string tcKimlikNo { get; set; } public string isim { get; set; } public string soyisim { get; set; } public int cinsiyet { get; set; } public DateTime kayitTarih { get; set; } public int kayitKullanici { get; set; } public int guncellemeKullanici { get; set; } public bool silindi { get; set; } }
public class Personel:BaseClass { public DateTime IsBaslangicTarihi { get; set; } public DateTime IsBitisTarihi { get; set; } public int IzinSayisi { get; set; } }
public class Egitmen:BaseClass { public string Brans { get; set; } public int Seviye { get; set; } }
public class Ogrenci:BaseClass { public string bolum { get; set; } public int seviye { get; set; } }
En başta temel sınıfımız var Ogrenci, Egitmen,Personel sınıfları temel yani BaseClass’tan miras alıyorlar. Bunları da Program.cs üzerinden düzenleyelim:
class Program { static void Main(string[] args) { Egitmen egitmen1 = new Egitmen(); egitmen1.id = 5;//kalıtım egitmen1.isim = "Tutku";//kalıtım egitmen1.soyisim = "ÇAKIR";//kalıtım egitmen1.Brans = "Yazılım Mühendisliği"; Personel personel1 =new Personel(); personel1.isim = "Burhan"; //kalıtım personel1.soyisim = "ÇAKIR"; //kalıtım personel1.IsBaslangicTarihi = DateTime.Now; Ogrenci ogrenci1 = new Ogrenci(); ogrenci1.seviye = 1; ogrenci1.bolum = "Mekatronik"; ogrenci1.id = 1; //kalıtım ogrenci1.isim = "Ahmet";//kalıtım ogrenci1.soyisim = "YILMAZ";//kalıtım } }
Not: Yapıcı metodlara WriteLine komutunu girdiğimizde ilk olarak konsolda BaseClass’ın metninin ardından Program.cs de örneklenen mirasçı classın metninin ekranda görülmüştür.
Yani ilk olarak miras bırakan yani baba/ana sınıfın yapıcı metodu çalışır ardından örneklenen mirasçi sınıfın yapıcı metodu çalışır. Ardından başka örneklenen mirasçı sınıflar varsa onlarda da sıralama aynı şekilde devam eder.
public class BaseClass { public int id { get; set; } public string referansKod { get; set; } public string tcKimlikNo { get; set; } public string isim { get; set; } public string soyisim { get; set; } public int cinsiyet { get; set; } public DateTime kayitTarih { get; set; } public int kayitKullanici { get; set; } public int guncellemeKullanici { get; set; } public bool silindi { get; set; } public BaseClass() { IDAta(); } private void IDAta() { Random rnd = new Random(); this.id=rnd.Next(1000,9000); } public void OrnekMetot() { //Test } }
public class Egitmen:BaseClass { public string Brans { get; set; } public int Seviye { get; set; } public Egitmen() { Console.WriteLine("Eğitmen nesnemizin yapıcı metodu çalıştı"); } }
class Program { static void Main(string[] args) { Egitmen egitmen1 = new Egitmen(); System.Threading.Thread.Sleep(1000);//aynı ID'yi atama işlemi olabilir bu sebeple 1 saniye bekleme yaptırdık Personel personel1 =new Personel(); System.Threading.Thread.Sleep(1000);//aynı ID'yi atama işlemi olabilir bu sebeple 1 saniye bekleme yaptırdık Ogrenci ogrenci1 = new Ogrenci(); ogrenci1.OrnekMetot(); Console.ReadLine(); } }
Örneklenen alt sınıf üzerinden public veya protected erişim belirleyicili temel sınıftaki metoda erişilebilir.
Boxing ve unboxing örneği
object o1 = ogrenci1; //boxing ogrenci1 = (Ogrenci)o1; //unboxing
class Program { static void Main(string[] args) { Egitmen egitmen1 = new Egitmen(); System.Threading.Thread.Sleep(1000);//aynı ID'yi atama işlemi olabilir bu sebeple 1 saniye bekleme yaptırdık Personel personel1 =new Personel(); System.Threading.Thread.Sleep(1000);//aynı ID'yi atama işlemi olabilir bu sebeple 1 saniye bekleme yaptırdık Ogrenci ogrenci1 = new Ogrenci(); ogrenci1.OrnekMetot(); BaseClass tip1; tip1 = egitmen1; //Eğitmen nesnesini ebeveyn nesnesine atadık egitmen1 = (Egitmen)tip1; //unboxing tip1 = personel1; // Personel nesnesini ebeveyn class nesnesine atadık personel1 = (Personel)tip1; //unboxing tip1 = ogrenci1; // Öğrenci nesnesini ebeveyn class nesnesine atadık ogrenci1 = (Ogrenci)tip1; //unboxing Console.ReadLine(); } }
Yukarıdaki örneklerde Program.cs içindeki main metodu içinde child classların örneklenmesi ile base class nesnelerine erişmiştik. Child class içinden bu baseclass fieldlarına erişmek için metod kullanmamız lazım mesela yapıcı metod içinden this.id yazarak id fieldına erişebiliriz. veya farklı metotlar yazıp bu baseclasstaki elemanlara değer verebiliriz. Her şeyi program.cs içindeki main metodu içinde yapmak zorunda değiliz.
Kalıtılmasını istemediğimiz classın başına sealed kodu girmeliyiz.
sealed public class Egitmen:BaseClass { public string Brans { get; set; } public int Seviye { get; set; } public Egitmen() { Console.WriteLine("Eğitmen nesnemizin yapıcı metodu çalıştı"); } }
Temel Anlatım Kısmı: http://kodlasana.com/programlama/c-sharp/c-oop-inheritancekalitim-temel-anlatim.html
Kalıtımda protected erişim belirleyicili field ve metodlara mirasçı erişebilir.
Bir cevap yazın