Implementation Inheritance #3: Constructor

     ทบทวนความจำในบทก่อนๆ นะครับ การทำ Implementation Inheritance ดูเหมือนว่า มีการโอน Code และ Data จาก Base Class ไปสู่ Derived Class แต่จริงๆ แล้วการกระทำภายในมันจะเอา object ของทั้งสอง class มาผูกติดกัน การมองภายในนั้นก็ยังมองแยกเป็นสอง object นะครับ เพื่อไม่ให้มีการทำลาย Encapsulation ภาษาทาง OOP จึงต้องจำกัดการมองเห็นระหว่าง Base Class และ Derive Class ดังที่เราได้เรียนไปในบทที่แล้ว

    มาบทนี้เรามาเรียนรู้ Constuctor กัน ซึ่งเป็นเรื่อง Syntax ล้วนๆ  อย่าลืมนะครับ object นั้นประกอบด้วยสองส่วนคือส่วนของ Base class และ ส่วนของ Derive Class ภายในยังถือว่าเป็นอิสระต่อกัน เวลาเรียก Constructor ก็ต้องเรียกสำหรับทั้งสอง class นะครับ ถึงจะสมบูรณ์ เรามาดูรายละเอียดกัน

im_cons.cs

using System;
class Employee
{
	private string name;
	public Employee()
	{
		Console.WriteLine("Constructor Employee() is called");
		name = "Somchai";
	}
	public Employee(string name)
	{
		Console.WriteLine("Constructor Employee(string name) is called");
		this.name = name;
	} 	

	public void ShowName()
	{
		Console.WriteLine(name);
	}
}
class Manager : Employee
{ 	
	public Manager(string name) : base(name)
	{
		Console.WriteLine("Constructor Manager(string name) is called");
	}
}
class Start
{
	public static void Main()
	{
		Manager x = new Manager("Supoj");
		x.ShowName();
	}
}

DOS Prompt

C:\CS>im1_cons
Constructor Employee(string name) is call
Constructor Manager(string name) is called
Supoj

C:\CS>_

   ลำดับการทำงาน

  1. ใน class Start มี Method Main() ข้างในมีคำสั่งให้ new Manager("Supoj")
  2. เมื่อมีการ new Manager() Construtor ของ Manager จะถูกเรียก ตัวที่ถูกเรียกนั้นก็คือ public Manager(string name)
  3. ในกรณีนี้ ก่อนที่ทำเนื้อหาของ Construtor ตัวนี้ มีคำสั่ง base(name) นั้นก็คือให้ไปเรียก Constructor ของ Employee (เพราะ employee เป็น base class)
  4. Construtor ของ Employee ถูกทำงาน พิมพ์บรรทัดแรกออกที่จอภาพ
  5. กลับมาที่ Construtor ของ Manager ทำต่อจนเสร็จ พิมพ์บรรทัดที่สองออกจอภาพ
  6. กลับไปที่ Main() สั่ง ShowName()
  7. เมื่อตรวจสอบดูแล้วว่า Manager ไม่มี ShowName() มันจึงไปหาต่อที่ Employee
  8. พบ ShowName() ที่ Employee จึงทำตามคำสั่ง
  9. กลับมาที่ Main() จบโปรแกรม

    มีข้อสังเกตหน่อยนะครับ คือ

    คงไม่ยุ่งเกินไปนะครับ