İşte buna base sentax ınyla karar verilir. Türemiş sınıfın başlangıç metodunun kapanış parantezinden sonra ‘ :base(…) ‘ yazım şekliyle belirtilen baslangıc metodunu cagırır. Örneğin:
1 2 3 4 5 6 7 8 9 10 11 12 |
class A { //... } class B : A { //... public B(...) :base(...) { //... } } |
Burada base sentax ına uygun olan argüman listesine uygun olan baslangıc metodu cagrılır.
Türemiş sınıfın baslangıç metodunda :base() sentax ı hiç belirtilmeyebilir. Belirtmemekle :base() belirlemesi yapmak aynı anlamdadır. Yani hiç belirleme yapılmadıgında taban sınıfın default baslangıç metodu calıstırılır.
Türemiş sınıfın baslangıç metodunda base sentax ındaki argümanda türemiş sınıfın baslangıç metodunun parametreleri kullanılabilir.
Örneğin:
1 2 3 4 |
public B(int a, int b) :base(a) { //... } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
using System; namespace CSD { class App { public static void Main() { B x = new B(); B y = new B(100, 200); } } class A { public A() { Console.WriteLine("A()"); } public A(int a) { Console.WriteLine("A() Int"); } //... } class B : A { //... public B() { Console.WriteLine("B()"); } public B(int a,int b):base(a) { Console.WriteLine("B(Int, Int)"); } } } |
Ekran çıktısı:
A()
B()
A() Int
B(Int, Int)
Press any key to continue . . .
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
using System; using System.Windows.Forms; namespace CSD { class App { public static void Main() { B x = new B(); B y = new B(100, 200); } } class A { public A() { Console.WriteLine("A()"); } public A(int a) { Console.WriteLine("A(int)"); } //... } class B : A { public B() { Console.WriteLine("B()"); } public B(int a, int b) : base(a) { Console.WriteLine("B(int, int)"); } } } |
Görüldüğü gibi her sınıf kendi doğrudan baslangıc metodunu cagırmaktadır.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
using System; namespace CSD { class App { public static void Main() { Worker w = new Worker("Kaan Aslan","05322577250",100.23); Console.WriteLine("{0} {1} {2}", w.Name, w.Telno, w.Salary); } } class Employee { private string m_name; private string m_telno; public Employee(string name, string telno) { m_name = name; m_telno = telno; } public string Name { get { return m_name; } set { m_name = value; } } public string Telno { get { return m_telno; } set { m_telno = value; } } } class Worker : Employee { private double m_salary; public Worker(string name, string telno, double salary) : base(name, telno) { m_salary = salary; } public double Salary { get { return m_salary; } set { m_salary = value; } } } } |
Bir sınıfın çok fazla veri elemanı bulunuyor olabilir. Tüm bunları constructor dan alıp set etmemiz gerekmiyor sadece en önemlilerini constructor dan set ederiz diğerlerini propertyler ile set ederiz. Yani tüm veri elemanlarının baslangıc metodları ile set edilmesi hoş bir durum değildir örnegin 50 tane veri elemanı gibi.. bunları sadece en önemlilerini constructor ile set edilir. Eğer hepsi çok öenmliyse property ler ile hepsini alırız.
Burada doğru teknik en önemli birkaç degerin dısarıdan baslangıc yoluyla alınması digerlerinin property yoluyla set edilmesidir.
Şüphesiz base sentax ı yalnızca baslangıc metodlarında kullanılır. Hhb. Metodda kullanılamaz
Kaynak:Kaan Aslan Hocanın Dersinde Tuttuğum Ders Notlarıdır.