วิธีเรียกใช้ 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)
    {
        // สิ่งอื่น ๆ ที่นี่
    }
}

การเปลี่ยนแปลงสำคัญที่อธิบาย

  1. การใช้รายการเริ่มต้นของ Constructor: สังเกตว่าเรารวม : base(message) ไว้โดยตรงหลังพารามิเตอร์ของ constructor สิ่งนี้บอก C# ให้เรียกใช้ตัวสร้างของคลาสพื้นฐาน (Exception) และส่งพารามิเตอร์ message ให้

  2. ทำความเข้าใจกับขีดจำกัดการเรียกใช้ Constructor: ใน C# constructor ไม่ใช่เมธอดมาตรฐานและไม่สามารถเรียกใช้เหมือนกับเมธอดปกติเมื่อเริ่มต้นตัวสร้าง ดังนั้นวิธีการก่อนหน้าที่ใช้ base(message) ภายในร่างของเมธอดจึงไม่สามารถทำงานได้

  3. พารามิเตอร์เพิ่มเติม: หากคุณต้องการใช้พารามิเตอร์เพิ่มเติม 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# คุณสามารถดำดิ่งไปในเอกสารอย่างเป็นทางการของไมโครซอฟต์หรือแหล่งข้อมูลการเขียนโปรแกรมอื่น ๆ