Destructors
ศศิรัตน์ บริสุทธิ์ 650710583
Destructor คืออะไร
Destructor ในภาษา C# เป็น specialized เมธอด ภายในคลาสใช้ในการทำลายอินสแตนซ์ของคลาสที่ไม่ได้ใช้งานอีกต่อไป หรือวัตถุที่อยู่นอกขอบเขต (Scope) ซึ่งตัว destructor จะถูกเรียกอัตโนมัติโดยกระบวนการจัดการหน่วยความจำอัตโนมัติ Garbage Collector ของ .NET framework ช่วยในการจัดการ จัดสรร ทรัพยากร ขอบเขตการทำงาน ทำให้นักพัฒนาสามารถปล่อยทรัพยากรที่ไม่มีการจัดการอย่างเป็นระบบได้ เช่น การจัดการไฟล์, การเชื่อมต่อฐานข้อมูล หรือการเชื่อมต่อเครือข่าย (Network socket)
ลักษณะสำคัญของ Destructor
Destructor สามารถมีได้เพียงตัวเดียวภายในคลาส
ในการสร้าง destructor สร้างได้โดยการใส่สัญลักษณ์เครื่องหมายตัวหนอน (~) ด้านหน้าชื่อของ destructor ซึ่งต้องเป็นชื่อเดียวกับคลาส ทำให้ destrctor แตกต่างจาก constructor
Destructor ไม่มีการส่งค่าคืนและไม่มีการรับ parameter หรือ modifier ใด ๆ
Destuctor ไม่สามารถใช้ใน structure ใช้ได้เพียงในคลาสเท่านั้น
ไม่สามารถโอเวอร์โหลดหรือสืบทอด destructor ได้
เมื่อโปรแกรมจบลง destructor จะเรียกใช้ เมธอด Finalize บนคลาสของอ็อบเจ็กต์

โดยทั่วไปแล้ว C# ไม่ต้องการการจัดการหน่วยความจำจากนักพัฒนามากเท่ากับภาษาอื่น ๆ ที่ไม่มีกระบวนการจัดการหน่วยความจำอัตโนมัติ (garbage collection) เนื่องจาก .NET garbage collector จะจัดการการจัดสรรและการปล่อยหน่วยความจำของวัตถุโดยอัตโนมัติ แต่ในกรณีที่โปรแกรมมีการใช้ทรัพยากรที่ไม่มีการจัดการ (unmanaged resources) เช่น การจัดการไฟล์ และการเชื่อมต่อเครือข่าย ควรใช้ Destructor เพื่อปล่อยทรัพยากร ให้วัตถุมีสิทธิ์ในการทำ finalization ตัว garbage collector จะเรียกใช้เมธอด Finalize ของวัตถุ
นักพัฒนา C# มักจะใช้คำสั่ง using
ร่วมกับวัตถุที่ใช้อินเตอร์เฟซ IDisposable
ซึ่งจะช่วยให้สามารถปล่อยทรัพยากรได้อย่างทันท่วงที มีความแน่นอน และน่าเชือถือ ทำให้ Destructor ถูกใช้น้อยลงใน C# ปัจจุบัน อย่างไรก็ตาม การทำความเข้าใจการใช้ Destructor ยังคงมีความสำคัญสำหรับสถานการณ์ที่ต้องการการจัดการทรัพยากรโดยตรง
ตัวอย่าง Destructor ใน C#
Destructor ต้องมีชื่อเดียวกับ class และมีสัญลักษณ์ ~ (ตัวหนอน) ด้านหน้า
เมื่อเราสร้างอ็อบเจ็กต์ของคลาส Employee
ทำให้มีการเรียกใช้ constructor
โดยหลังจากที่ขอบเขตของอ็อบเจ็กต์สิ้นสุดลงและไม่จำเป็นต้องใช้อ็อบเจ็กต์ e1
อีกต่อไปแล้ว ตัว destructor จะถูกเรียกใช้โดยอัตโนมัติเพื่อจะทำลายวัตถุ e1
Output :
เปรียบเทียบ Destructor ในภาษา Java, C และ Python
Destructor ในภาษา Java
ใน Java ไม่มีแนวคิดเกี่ยวกับ Destructor เนื่องจากมีการจัดการสรรจัด และปล่อยทรัพยากรด้วย garbage collector เช่นเดียวกันกับ C# ซึ่ง garbage collector ใน Java เป็นโปรแกรม (เธรด) ที่ทำงานบน JVM จะทำการลบวัตถุที่ไม่ได้ใช้งานโดยอัตโนมัติ และปล่อยหน่วยความจำ โดยที่นักพัฒนาไม่จำเป็นต้องจัดการหน่วยความจำด้วยตนเอง แต่ใน Java มีเมธอด finalize()
ที่ทำงานแบบ Destructor ช่วยให้แน่ใจว่าได้ปล่อยทรัพยากรก่อนที่จะปิดโปรแกรม แต่ปัจจุบันใน Java เวอร์ชั่นใหม่ไม่มีการใช้ finalize()
แล้ว
ตัวอย่าง Destructor ใน Java
Output :
Destructor ในภาษา C
Destructor ในภาษา C จะทำได้โดยการเรียกใช้ delete
เพื่อจะทำการปล่อยหน่วยความจำให้สามารถใช้งานได้ต่อไป ซึ่ง destructor ในภาษา C ต้องถูกกำหนดโดยนักพัฒนาเพื่อให้ทำงานได้ เพราะหากไม่มีการกำหนด destructor วัตถุจะยังคงอยู่ในหน่วยความจำจนกว่าจะถูกลบออกด้วยตนเอง
Destructor ในภาษา Python
Destructor ใน python เป็นเมธอดที่ถูกเรียกเมื่อวัตถุกำลังจะถูกทำลายหรือถูกลบออกจากหน่วยความจำ มีการประกาศเป็น __del__
เพื่อระบุการเป็น destructor ภายในคลาส และตัว python ก็มีระบบ garbage collector เช่นเดียวกันกับ C# เช่นกันในการปล่อยทรัพยากรโปรแกรม
ตัวอย่าง Destructor ใน Python
Output :
Video present
presentation (slides)
อ้างอิง
what is destructor and important features :
manasikirloskar.( 1 กุมภาพันธ์ 2562 ).Destructors in C#.geeksforgeeks.https://www.geeksforgeeks.org/destructors-in-c-sharp/
tutorialspoint.( ม.ป.ป ).C# - Classes.tutorialspoint.https://www.tutorialspoint.com/csharp/csharp_classes.htm
IronPDF.( 24 ธันวาคม 2566 ).C# Destructor (How it Works For Developers).ironpdf.https://www.tutorialspoint.com/csharp/csharp_classes.htm
Finalizers and important features :
BillWagner.( 14 มีนาคม 2566 ).Finalizers (C# Programming Guide).microsoft.https://www.tutorialspoint.com/csharp/csharp_classes.htm
Example destructor code in C# :
javatpoint.( ม.ป.ป ).C# Destructor.javatpoint.https://www.tutorialspoint.com/csharp/csharp_classes.htm
Destructor in Java :
javatpoint.( ม.ป.ป ).Java Destructor.javatpoint.https://www.javatpoint.com/java-destructor
Destructor in C :
Nisha Kumari.( ม.ป.ป ).C Destructor: C Explained.bito.https://bito.ai/resources/c-destructor-c-explained/
Destructor in Python :
vivekkothari.( 9 สิงหาคม 2567 ).Destructors in Python.geeksforgeeks.https://www.tutorialspoint.com/csharp/csharp_classes.htm
Last updated