C# KALITIM(INHERITANCE)
C# KALITIM(INHERITANCE)
Herkese merhabalar arkadaşlar bugün sizlere yeni öğrendiğim kalıtım(inheritance)’i elimden geldiğince anlatacağım. Küçük bir tanım yapmak gerekirse bir class dan başka bir class üretme diyebiliriz ya da bir classın özelliklerine başka bir classdan erişebilme izni diyebiliriz kafanızda birşeyler oluşturmaya yeter ama tam olarak tanımı bu değil.
Örneğin hayvan isimli bir class tanımladık, hayvan classından kedi, köpek, kuş vb. classları üretebilir ve hayvan classında tanımlanan özellikleri kullanmasına izin verebiliriz.
Hayvan Kedi Kalıtım Örneği
using System;namespace sensery
{
class hayvan
{
public double boy;
public double agirlik;
public void özellikgöster()
{
Console.WriteLine("boy = "+boy);
Console.WriteLine("Agirlik = "+agirlik);
} }
class kedi:hayvan
{
public string cinsi;
public void cinsgöster()
{
Console.WriteLine("Cinsi = "+cinsi);
}
}
class Program
{
static void Main(string[] args)
{
kedi k1 = new kedi();
k1.agirlik =5;
k1.boy = 10;
k1.cinsi = "van";
k1.özellikgöster();
k1.cinsgöster(); hayvan h1 = new hayvan();
h1.agirlik = 5;
h1.boy = 10;
h1.özellikgöster();
/*bunlarda hata verir.
h1.cinsi="van";
h1.cinsgöster();
*/
}
}
}
EKRAN ÇIKTISI
Kalıtımda Üye Erişim Belirteci
Sınıf dışında kullanılmasını istemediğimiz durumlarda private olarak tanımlardık. Kalıtımda ise sadece kalıtım olarak aktarılan sınıfta da kullanılmasını sağlayan erişim belirteci protected ‘dır. Kalıtım olarak aktarılmamışsa bir class ve içinde özelliği private ya da proteced tanımlamamız aynı işlevleri görmemizi sağlar. Protected kalıtım olarak türettiğimiz diğer classda da kullanılması için protected kullanırız.
Protected Örneği
using System;namespace sensery
{
class kedi
{
protected int ayaksayisi = 4;
public void yakalaav()
{
Console.WriteLine("Kedi Sınıfı Av yakaladı");
}
}
class Kaplan:kedi
{
public Kaplan()
{
Console.WriteLine("Ayak Sayisi = "+ayaksayisi);
}
}
class Program
{
static void Main(string[] args)
{
kedi kd = new kedi();
kd.yakalaav(); Kaplan kp = new Kaplan();
kp.yakalaav();// yakala av kedi sınıfınfan ancak kaplan sınıfından da protec ted sayasinde eriştik
}
}
}
EKRAN ÇIKTISI
Yapılandırıcılar(Yapıcı Metot)
Temel classa yapılandırıcı(yapıcı metot) tanımlamamız türetilmiş classa yapılandırıcı tanımlarsak her iki classa da yapılandırıcı tanımlamış oluruz. Eğer temel classa da yapılandırıcı tanımlarsak gereken kodları her iki yapılandırıcıya da yazmamız gerek. Bu durumda ise bize Base anahtar sözcüğü devreye girer.
Base Anahtar Sözcüğü
Görevleri;
1-Temel classın Yapılandırıcısını çağırmak
2-Temel classın türetilmiş classdan gizlediği özelliklere ulaşmak için
Ayrıyeten iki tane nesne tanımlamamıza gerek kalmadan .alışacak.
using System;namespace sensery
{
class A
{
public int Ozellik1;
public int Ozellik2;
public A()
{
Console.WriteLine("deneme");
}
public A(int ozellik1,int ozellik2)
{
Ozellik1 = ozellik1;
Ozellik2 = ozellik2;
}
}
class B:A
{
public int Ozellik3;
public int Ozellik4;
public B(int ozellik3,int ozellik4,int ozellik1,int ozellik2):base(ozellik1,ozellik2)
{
Ozellik3 = ozellik3;
Ozellik4 = ozellik4;
} }
class Program
{
static void Main(string[] args)
{
B b = new B(3, 4, 1, 2);
Console.WriteLine("özellik1 : "+b.Ozellik1+"\nözellik2 : "+b.Ozellik2+"\nözellik3 : "+b.Ozellik3+"\nözellik4 : "+b.Ozellik4 );
}
}
}
EKRAN ÇIKTISI
Kalıtım Ve Ad Gizleme
Türetilmiş classın bir özelliği ile temel classın aynı isimde özellik taşıması mümkündür. Böyle bir durumda istediğimiz özelliği gizleyebiliriz. Bunu yapabilmek için türetilmiş classın önüne new anahtar sözcüğünü kullanmamız gerekir. Yeni nesne tanımlanırken kullandığımız new anahtar sözcüğünden tamamen farklıdır. Şimdi gizlediğimiz elemanı kullanmak istediğimizde base anahtar sözcüğü ile ulaşabiliriz.
using System;namespace sensery
{
class A
{
public int a;
public A()
{
a = 1; }
}
class B:A
{
public new int a;
public int b;
public B()
{
a = 2;
b = base.a;//gizlediğimiz elemana ulaştık
} }
class Program
{
static void Main(string[] args)
{
B b = new B();
Console.WriteLine(b.a);
Console.WriteLine(b.b);
}
}
}
EKRAN ÇIKTISI
Çok Katmanlı Hiyeraşi
Bir classtan sadece 1 class türer diye düşünmüş olabilirsiniz. Düşünmeyin:-).Birden fazla türetilmiş class yazabiliriz örnek;
// Türetilmii class tan kaç tane nesne üretirsek hepsinde temek classın da yapıcı metotunu çalıştıracak.
using System;namespace sensery
{
class A
{
public string adsoyad;
public A()
{
Console.WriteLine("A class'ı"); }
}
class B:A
{
public int Tckimlikno;
public B()
{
Console.WriteLine("B class'ı");
} }
class C:A
{
public String Memleket;
public C()
{
Console.WriteLine("C class'ı");
} }
class Program
{
static void Main(string[] args)
{
B b = new B();
C c = new C();
}
}
}