Kalıtım, nesneye dayalı programlamanın en önemli özelliklerinden biridir. Kalıtım yolu ile sınıflar birbirinden türetilebilir. Bir sınıf diğer bir sınıftan türediği zaman, türediği sınıfın bütün özelliklerini içerir. Bunun yanında kendine has özellikler de barındırabilir.
class A { public int degisken_1; public void Metot_1() { Console.WriteLine("A Sınıfının Metodu"); } } class B : A { public int degisken_2; public void Metot_2() { Console.WriteLine("B Sınıfının Metodu"); } }
Yukarıdaki örnekte; A temel sınıf, B ise türetilmiş sınıftır. Türetme işlemi “class B : A” kodu ile 11. satırda yapılmıştır. B sınıfı A sınıfından türetildiği için A sınıfı içerisindeki değişken ve metodu kalıtım yolu ile almaktadır.
class Program { static void Main(string[] args) { B b = new B(); b.degisken_1 = 10; b.Metot_1(); b.degisken_2 = 15; b.Metot_2(); } }
Türetme işleminden dolayı B sınıfı, A sınıfı içerisindeki “degisken_1” ve “Metot_1()” elemanlarını kendi içerisinde tanımlanmış gibi kullanabilmektedir.
Türetilmiş sınıf, temel sınıf içerisindeki değişkenleri ve metotları kendi içerisinde tanımlanmış gibi kullanabilir. Ancak temel sınıf, türetilmiş sınıftaki değişkenleri ve metotları kullanamaz.
Erişim Belirteçleri
Türetilmiş bir sınıfa, temel sınıftaki elemanlardan sadece public ve protected olarak tanımlananlar aktarılır. Erişim belirteci private olan elemanlar kalıtım ile aktarılmaz.
Erişim Belirleyicisi: Metot ve özelliklere olan erişimin sınırlarını belirtmektedir. (Bknz: C# – Sınıflar)
- Private: Sadece tanımlandığı sınıf içerisinden erişilebilir. (Kalıtım ile aktarılmaz.)
- Public: Her yerden erişilebilir. (Kalıtım ile aktarılır.)
- Internal: Sadece bulunduğu projede erişilebilir. (Kalıtım ile aktarılır.)
- Protected: Tanımlandığı sınıfta ve o sınıfı miras (kalıtım) alan sınıflardan erişilebilir. (Kalıtım ile aktarılır.)
public class TemelSinif { protected string degisken_1 = "Temel Sınıf İçerisinde"; public string degisken_2 = "Temel Sınıf İçerisinde"; private string degisken_3 = "Temel Sınıf İçerisinde"; } public class TuretilmisSinif : TemelSinif { public void Metot_1() { degisken_1 = "Türetilmiş Sınıf İçerisinde"; } public void Metot_2() { degisken_2 = "Türetilmiş Sınıf İçerisinde"; } }
TemelSinif içerisindeki degisken_3‘ün erişim belirteci private olduğu için TuretilmisSinif‘a aktarılmaz. Sadece TemelSinif içerisinde kullanılabilir.
TemelSinif içerisindeki degisken_2‘nin erişim belirteci public olduğu için TuretilmisSinif‘a aktarılır. Yukarıdaki örnekte TuretilmisSinif içerisinde degisken_2 adında bir değişken tanımlanmamış olmasına rağmen TemelSinif‘tan kalıtım aldığı için Metot_2() içerisinde kullanılabilmiştir.
TemelSinif içerisindeki degisken_1‘in erişim belirteci protected olduğu için TuretilmisSinif‘a aktarılır. Yukarıdaki örnekte TuretilmisSinif içerisinde degisken_1 adında bir değişken tanımlanmamış olmasına rağmen TemelSinif‘tan kalıtım aldığı için Metot_1() içerisinde kullanılabilmiştir.
Peki bu durum da public ile protected belirteçleri arasındaki fark nedir?
TemelSinif‘dan TuretilmisSinif‘a kalıtım yoluyla aktardığımız “degisken_1 (protected)” ve “degisken_2 (public)” elemanlarını TuretilmisSinif içerisinde kullanabiliriz. Ancak TuretilmisSinif‘dan oluşturduğumuz bir nesne üzerinden sadece “degisken_2” elemanına erişebiliriz. Erişim belirteci protected olan degisken_1 elemanına başka bir sınıftan erişemeyiz. Bunun nedeni; Erişim belirteci protected olan elemanlar tanımlandıkları sınıfta ve kalıtım yolu ile aktarıldıkları sınıflar da private elemanların özelliklerini gösterirler.
Erişim belirteci protected olan elemanların private elemanlardan tek farkı kalıtım yolu ile aktarılabiliyor olmalarıdır. Eğer türeme söz konusu değilse protected olarak bildirilen elemanlarla private olarak bildirilen elemanlar arasında bir fark kalmaz. Erişim belirteci protected olan elemanları, kalıtım yolu ile aktarılabilen private elemanlar olarak düşünebiliriz.
Serdar YILMAZ
sormak istediğim bir konu var ben şuan c sharp döküman sayfasındaki çoğu şeyi biliyorum buradan sonra hangi yollara sapabilirim yani ne tür bir geliştirici olabilirim(amacım unity’de oyun geliştirmek ama alternatifleri de bilmek istiyorum) ve bildiğim şeylerin pratiğini nasıl yapabilirim, bir yerde okuduğuma göre uzman bir geliştiricinin en azından 1000 saat pratik tecrübesi oluyormuş bu pratik tecürebesini c sharp konsol bilen biri nasıl edinebilir çünkü formu zerre öğrenmedim consolun genel komutlarını metodlarını kalıtım vb sini biliyorum ama form da sıfırım ne önerirsiniz masaüstü uygulama geliştirmeye fazla ilgim olmadığı halde pratik yapmak için form + sql öğrenmeliyim ? şimdiden tşk
Bende Oyun Geliştirici Olma Yolundayım Sana Tavsiyem Form’da Çalışmak İstiyorsan Bildiklerine Bir Sistem Hazırla Örneğin SQL Kullanarak Oyuncuların Verilerini Saklayabilmek Düzenlemek İçin Kullanabilirsin (Kullanıcı Adı,Epostası,Oyun İçi Parası,İtemleri,Kostümleri) Bu Tarz Şeyler Yapabilirsin Yada Bir Tane Cloud Service Yazıp Oyunlara Entegre Etmeye Çalış Sonrada Admin Menü Tarzı Bişi Yap Server Bazlı
teşekkürler
Emeğinize sağlık serdar hocam. Açıklayıcı bir anlatım olmuş teşekkürler 🙂