วิธีเรียกใช้ Base Constructor
ใน C# อย่างถูกต้อง
เมื่อทำงานกับการเขียนโปรแกรมเชิงวัตถุใน C# โดยเฉพาะเมื่อทำงานกับการสืบทอด คุณมักจะพบความจำเป็นในการส่งข้อมูลจากคลาสที่สืบทอดไปยังคลาสพื้นฐาน นี่เป็นสิ่งที่สำคัญเพื่อให้แน่ใจว่าคุณสมบัติและพฤติกรรมที่กำหนดในคลาสพื้นฐานถูกเริ่มต้นอย่างถูกต้อง ในโพสต์บล็อกนี้เราจะมุ่งเน้นไปที่วิธีการเรียกใช้ base constructor
อย่างมีประสิทธิภาพเมื่อสืบทอดจากคลาสเช่น Exception
ปัญหา
จินตนาการว่าคุณกำลังสร้างคลาสข้อยกเว้นที่กำหนดเองซึ่งสืบทอดจากคลาส Exception
ที่มีอยู่ใน C# วัตถุประสงค์ของคุณคือการส่งข้อมูลเพิ่มเติม (เช่น ข้อความ) ไปยัง constructor ของคลาส Exception
อย่างไรก็ตามนักพัฒนาหลายคนมักพบปัญหาเมื่อพยายามทำเช่นนี้ ตัวอย่างเช่น ความพยายามของคุณอาจมีลักษณะดังนี้:
class MyExceptionClass : Exception
{
public MyExceptionClass(string message, string extraInfo)
{
// นี่คือที่ทุกอย่างเริ่มมีปัญหา
base(message);
}
}
ในโค้ดตัวอย่างนี้ คุณอาจสับสนว่าทำไมคุณถึงพบข้อผิดพลาด สาเหตุอยู่ที่วิธีการที่ไม่ถูกต้องในการเรียกใช้ base constructors มาทำลายมันและเข้าใจวิธีการที่ถูกต้องกันดีกว่า
วิธีแก้ปัญหา
เพื่อส่งพารามิเตอร์ไปยัง base class constructor ใน C# อย่างถูกต้อง คุณจำเป็นต้องใช้ไวยากรณ์เฉพาะที่อนุญาตให้คุณทำเช่นนั้นได้โดยตรงในรายชื่อผู้เริ่มต้นของ constructor ของคลาสที่สืบทอด นี่คือวิธีการแก้ไขการดำเนินการในเบื้องต้นของคุณ:
ไวยากรณ์ที่ถูกต้อง
นี่คือเวอร์ชันที่แก้ไขของคลาสของคุณ:
public class MyExceptionClass : Exception
{
public MyExceptionClass(string message, string extraInfo) : base(message)
{
// สิ่งอื่น ๆ ที่นี่
}
}
การเปลี่ยนแปลงสำคัญที่อธิบาย
-
การใช้รายการเริ่มต้นของ Constructor: สังเกตว่าเรารวม
: base(message)
ไว้โดยตรงหลังพารามิเตอร์ของ constructor สิ่งนี้บอก C# ให้เรียกใช้ตัวสร้างของคลาสพื้นฐาน (Exception
) และส่งพารามิเตอร์message
ให้ -
ทำความเข้าใจกับขีดจำกัดการเรียกใช้ Constructor: ใน C# constructor ไม่ใช่เมธอดมาตรฐานและไม่สามารถเรียกใช้เหมือนกับเมธอดปกติเมื่อเริ่มต้นตัวสร้าง ดังนั้นวิธีการก่อนหน้าที่ใช้
base(message)
ภายในร่างของเมธอดจึงไม่สามารถทำงานได้ -
พารามิเตอร์เพิ่มเติม: หากคุณต้องการใช้พารามิเตอร์เพิ่มเติม
extraInfo
คุณสามารถขยาย constructor ต่อไป โดยอาจเก็บไว้เพื่อใช้ในภายหลังภายในคลาสข้อยกเว้นที่กำหนดเองของคุณ
ตัวอย่างการใช้ทั้งสองพารามิเตอร์
หากคุณตัดสินใจที่จะรวมตรรกะเพิ่มเติมสำหรับ extraInfo
คลาสของคุณอาจมีลักษณะดังนี้:
public class MyExceptionClass : Exception
{
public string ExtraInfo { get; private set; }
public MyExceptionClass(string message, string extraInfo) : base(message)
{
ExtraInfo = extraInfo; // เก็บข้อมูลเพิ่มเติมเพื่อตรวจสอบในภายหลัง
}
}
สรุป
โดยการปฏิบัติตามไวยากรณ์ที่ถูกต้องในการเรียกใช้ constructor ของคลาสพื้นฐาน คุณสามารถมั่นใจได้ว่าฮีเรอาร์คของคลาสใน C# ของคุณถูกตั้งค่าอย่างถูกต้อง นี่เป็นสิ่งที่สำคัญโดยเฉพาะเมื่อทำงานกับข้อยกเว้น เพราะช่วยรักษาความชัดเจนและฟังก์ชันการทำงานในกิจวัตรการจัดการข้อผิดพลาดของคุณ จำไว้ว่าต้องใช้รายการเริ่มต้นเสมอเพื่อส่งพารามิเตอร์ไปยัง base constructors!
สำหรับการอ่านเพิ่มเติมและการสำรวจเกี่ยวกับการสืบทอดและ constructors ใน C# คุณสามารถดำดิ่งไปในเอกสารอย่างเป็นทางการของไมโครซอฟต์หรือแหล่งข้อมูลการเขียนโปรแกรมอื่น ๆ