การเรียกใช้งาน constructor จากอีก constructor ใน C#.NET

constructor คืออะไร

constructor ก็คือ ฟังก์ชันที่ถูกเรียกใช้งาน เมื่อ object ถูกสร้างขึ้นมา ซึ่งใน C#.NET  ก็คือฟังก์ชันที่ตั้งชื่อเป็นชื่อเดียวกับชื่อ class นั่นเอง

 

constructor มีประโยชน์อย่างไร

ในการสร้าง object ขึ้นมา บางครั้งต้องมีการระบุค่าเริ่มต้นบางอย่างให้กับ object นั้น ซึ่ง constructor ก็จะเป็นเครื่องมือหนึ่งที่เป็นตัวช่วยบังคับให้ต้องระบุค่าเริ่มต้นนี้ตอนสร้าง object นั่นเอง

 

ยกตัวอย่าง เช่น

class Student

{

public Student(string studentID)

{

คำสั่งดึงข้อมูลนักศึกษาด้วย Student ID โดยใช้ข้อมูล Student ID จาก argument studentID

}

}

จากตัวอย่างนี้ ต้องการสร้าง object Student โดยใช้ Student ID เพื่อไปดึงข้อมูลเบื้องต้นของนักศึกษามาแสดง

ดังนั้น object ใหม่ที่สร้างจาก class Student ก็จะต้องระบุค่า Student ID ให้กับ argument studentID ก่อน

ตัวอย่างการเรียกใช้งานคือ

Student student = new Student(12345);

student ก็คือ object ที่ถูกสร้าง

123456 คือ ข้อมูล Student ID ทีต้องระบุตอนที่ object นี้ถูกสร้างนั่นเอง

 

ทำไมต้องเรียกใช้ constructor จากอีก constructor หนึ่ง

ในบางครั้งเมื่อเราใช้งาน class ไประยะเวลาหนึ่ง อาจะเจอกรณีที่ constructor เดิม ยังไม่รองรับความต้องการที่เปลี่ยนไปหรือเพิ่มขึ้น   แต่ความต้องการใหม่นั้นยังคงต้องใช้ชุดคำสั่งและขั้นตอนการทำงานเหมือนกับที่มีอยู่เดิมด้วย และมีการเพิ่มเติมชุดคำสั่งใหม่เข้าไปเล็กน้อยเพื่อให้รองรับกับความต้องการใหม่ด้วย ซึ่งทางเลือกที่เป็นไปได้คือ

  1. ปรับแก้ constructor เดิมที่มีอยู่ให้รองรับความต้องการใหม่
  2. สร้าง constructor ใหม่ โดยทำการสำเนาชุดคำสั่งทั้งหมดใน constructor เดิมมา
  3. สร้าง constructor ใหม่ โดยเรียกใช้งาน constructor เดิม

มาพิจารณาแต่ละทางเลือก

ทางเลือกที่ 1 เป็นการปรับแก้ของเดิมที่มีอยู่แล้ว ซึ่งเป็นทางที่ควรเลี่ยงที่สุด เพราะอาจจะไปกระทบกับการทำงานเดิมที่ถูกต้องอยู่แล้ว และอาจจะกระทบเป็นลูกโซ่กับ object อื่นที่มาเรียกใช้

ทางเลือกที่ 2 สำเนาคำสั่งทั้งหมดจาก constructor เดิม มาใส่ใน constructor ใหม่ แล้วเขียนคำสั่งเพิ่มเพื่อให้รองรับความต้องการใหม่ ซึ่งทางเลือกนี้ถือว่าดีกว่าทางเลือกแรก เพราะไม่กระทบกับการทำงานเดิมแน่นอน แต่จะเห็นว่าเกิดความซ้ำซ้อนกันของชุดคำสั่งของ constructor เดิม และใหม่ และจะพบปัญหาในกรณีที่มีความจำเป็นต้องปรับปรุงคำสั่งที่ใช้อยู่ใน constructor ทั้งสอง ผู้พัฒนาก็จะต้องมาแก้ทั้งสองที่ให้เหมือนกันอีก ซึ่งจะเป็นการเสียเวลา

ทางเลือกที่ 3 เรียกใช้งาน constructor เดิม ซึ่งจะเห็นว่าเป็นวิธีการที่สะดวกรวดเร็วที่สุด หากต้องการปรับปรุงคำสั่ง ก็เพียงไปจัดการที่ constructor เดิมเท่านั้น

 

วิธีการเรียกใช้งาน constructor เดิม จาก constructor ใหม่

syntax ที่ใช้ใน C#.NET คือ  หลังจากส่วนประกาศ constructor ให้ใช้  : this() เพิ่มเข้าไป

ยกตัวอย่าง

 

class Student

{

public Student(string studentID) //constructor เดิม

{

คำสั่งดึงข้อมูลนักศึกษาด้วย Student ID โดยใช้ข้อมูล Student ID จาก argument studentID

}

 

public Student(string studentID, string citizenID) : this(studentID)  //constructor ใหม่

{

คำสั่งใหม่ที่เพิ่มเติม

}

}