ความแตกต่างระหว่างการกำจัด () และสิ้นสุด () ใน C #

ผู้เขียน: Laura McKinney
วันที่สร้าง: 2 เมษายน 2021
วันที่อัปเดต: 13 พฤษภาคม 2024
Anonim
สอนภาษาซี C: เข้าใจความแตกต่างระหว่างรหัสขึ้นบรรทัดใหม่ของ Windows และ Unix (Linux, macOS)
วิดีโอ: สอนภาษาซี C: เข้าใจความแตกต่างระหว่างรหัสขึ้นบรรทัดใหม่ของ Windows และ Unix (Linux, macOS)

เนื้อหา


วิธีการกำจัด () และขั้นสุดท้าย () เป็นวิธีการของ C # ซึ่งมีการเรียกใช้เพื่อปลดปล่อยทรัพยากรที่ไม่ได้รับการจัดการโดยวัตถุ วิธี dispose () ถูกกำหนดไว้ใน IDisposable ของอินเตอร์เฟสในขณะที่ method finalize () นั้นถูกกำหนดไว้ภายใน object class ความแตกต่างที่สำคัญระหว่างการกำจัด () และการสิ้นสุด () คือวิธีการ ทิ้ง() จะต้องมีการเรียกใช้อย่างชัดเจนโดยผู้ใช้ในขณะที่วิธีการ จบ () ถูกเรียกใช้โดยตัวรวบรวมขยะก่อนที่วัตถุจะถูกทำลาย ให้เราศึกษาความแตกต่างอื่น ๆ ระหว่างพวกเขาด้วยความช่วยเหลือของแผนภูมิเปรียบเทียบที่แสดงด้านล่าง

  1. แผนภูมิเปรียบเทียบ
  2. คำนิยาม
  3. ความแตกต่างที่สำคัญ
  4. ข้อสรุป

แผนภูมิเปรียบเทียบ

พื้นฐานสำหรับการเปรียบเทียบกำจัด ()จบการทำงาน ()
ที่กำหนดไว้เมธอดการกำจัด () ถูกกำหนดในอินเตอร์เฟส IDisposable ของอินเตอร์เฟสเมธอด finalize () id ที่กำหนดในคลาส java.lang.object
วากยสัมพันธ์โมฆะสาธารณะกำจัด () {
// ทิ้งรหัสที่นี่
}
โมฆะที่ได้รับการป้องกันจะเสร็จสิ้น () {
// รหัสสรุปที่นี่
}
เรียก วิธีการกำจัด () ถูกเรียกโดยผู้ใช้เมธอด finalize () ถูกเรียกใช้โดยตัวรวบรวมขยะ
วัตถุประสงค์วิธีการกำจัด () จะใช้เพื่อฟรีทรัพยากรที่ไม่มีการจัดการเมื่อใดก็ตามที่มันถูกเรียกวิธีการสิ้นสุด () จะใช้เพื่อเพิ่มทรัพยากรที่ไม่มีการจัดการก่อนที่วัตถุจะถูกทำลาย
การดำเนินงานวิธีการกำจัด () จะต้องดำเนินการเมื่อใดก็ตามที่มีวิธีการปิด ()วิธีการสิ้นสุด () จะต้องดำเนินการสำหรับทรัพยากรที่ไม่มีการจัดการ
ตัวระบุการเข้าถึงวิธีการกำจัด () ถูกประกาศให้เป็นสาธารณะวิธีการสิ้นสุด () ถูกประกาศเป็นส่วนตัว
หนังบู๊ วิธีการกำจัด () เร็วขึ้นและกำจัดวัตถุออกทันทีวิธีการสิ้นสุดจะช้ากว่าเมื่อเทียบกับการกำจัด
ประสิทธิภาพวิธีการดำเนินการ () ดำเนินการทันทีโดยไม่ส่งผลกระทบต่อประสิทธิภาพของเว็บไซต์ วิธีการสิ้นสุด () ช้าลงส่งผลกระทบต่อประสิทธิภาพของเว็บไซต์


คำจำกัดความของการกำจัด ()

วิธีการกำจัด () วิธีการปล่อยทรัพยากรที่ไม่มีการจัดการที่จัดขึ้นโดยวัตถุของชั้นเรียน ทรัพยากรที่ไม่มีการจัดการคือไฟล์การเชื่อมต่อข้อมูล ฯลฯ วิธีการกำจัด () จะถูกประกาศในส่วนต่อประสาน IDisposeable และมันถูกนำมาใช้โดยชั้นเรียนโดยการใช้อินเตอร์เฟซ IDisposable วิธีนี้ไม่ได้ถูกเรียกโดยอัตโนมัติ โปรแกรมเมอร์จะต้องดำเนินการด้วยตนเองเมื่อคุณสร้างคลาสที่กำหนดเองที่ผู้อื่นจะใช้ วิธีการมีไวยากรณ์ต่อไปนี้:

โมฆะสาธารณะกำจัด () {// ทิ้งรหัสที่นี่}

ในไวยากรณ์ข้างต้นคุณสามารถสังเกตเห็นว่าวิธีการที่มีการประกาศเป็นสาธารณะ มันเป็นเพราะวิธีนี้มีการกำหนดไว้ในส่วนต่อประสาน IDisposable และจะต้องมีการดำเนินการโดยชั้นเรียนที่ใช้อินเตอร์เฟซนี้ ดังนั้นเพื่อให้สามารถเข้าถึงคลาสที่ใช้งานได้วิธีดังกล่าวจะประกาศเป็นสาธารณะ

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

ความหมายของการจบ ()

กระบวนการ finalize () ถูกกำหนดไว้ใน วัตถุ ชั้น ใช้สำหรับกิจกรรมการล้างข้อมูล เมธอดนี้ถูกเรียกใช้โดยตัวรวบรวมขยะเมื่อไม่ได้ใช้การอ้างอิงของวัตถุเป็นเวลานาน ตัวรวบรวมขยะจะทำให้ทรัพยากรที่มีการจัดการเป็นอิสระโดยอัตโนมัติ แต่ถ้าคุณต้องการปลดปล่อยทรัพยากรที่ไม่มีการจัดการเช่นการจัดการไฟล์การเชื่อมต่อข้อมูล ฯลฯ วิธีการสุดท้ายจะต้องดำเนินการด้วยตนเอง ตัวรวบรวมขยะเรียกใช้วิธีการสิ้นสุด () ก่อนที่มันจะทำลายวัตถุอย่างสมบูรณ์


ไวยากรณ์ของวิธีการจบ ():

โมฆะป้องกันการทำให้จบ () {// รหัสสุดท้ายที่นี่}

ในไวยากรณ์ข้างต้นวิธีการสิ้นสุด () ได้รับการประกาศว่าได้รับการคุ้มครอง เหตุผลที่อยู่เบื้องหลังคือวิธีการสิ้นสุด () จะต้องไม่สามารถเข้าถึงได้จากนอกชั้นเรียนและจะต้องสามารถเข้าถึงได้โดยตัวรวบรวมขยะเท่านั้น

เมธอด finalize () มีผลต่อต้นทุนของการทำงานเนื่องจากไม่ได้เพิ่มหน่วยความจำทันที ใน C # นั้นวิธีการสุดท้ายจะถูกเรียกโดยอัตโนมัติเมื่อมี destructors

  1. วิธีการกำจัด () ถูกกำหนดไว้ในส่วนต่อประสาน IDisposable. ในทางกลับกันวิธีการสรุป () ถูกกำหนดไว้ในชั้นเรียน วัตถุ.
  2. วิธีการกำจัด () จะต้องมีการเรียกใช้ด้วยตนเองภายในรหัสโดยโปรแกรมเมอร์ในขณะที่วิธีการสรุปจะถูกเรียกโดยอัตโนมัติโดยตัวเก็บรวบรวมขยะก่อนที่มันจะทำลายวัตถุ
  3. วิธีการกำจัดสามารถเรียกใช้ได้ตลอดเวลาในขณะที่วิธีการเก็บรวบรวมสุดท้ายถูกเรียกใช้โดยตัวรวบรวมขยะเมื่อพบว่าวัตถุนั้นไม่ได้ถูกอ้างอิงเป็นเวลานาน
  4. วิธีการกำจัด () ถูกนำมาใช้ในชั้นเรียนหลังจากใช้อินเตอร์เฟซ IDisposable วิธีการสิ้นสุด () จะต้องมีการดำเนินการเพียงเพื่อ ทรัพยากรที่ไม่มีการจัดการ เนื่องจากทรัพยากรที่มีการจัดการนั้นจะถูกทำให้เป็นอิสระโดยตัวรวบรวมขยะ
  5. ตัวระบุการเข้าถึงของเมธอด dispose () เป็นแบบสาธารณะตามที่กำหนดไว้ในส่วนต่อประสาน IDisposable และมันจะถูกนำมาใช้โดยคลาสที่ใช้อินเทอร์เฟซนี้ดังนั้นจึงควรเป็นแบบสาธารณะ ในทางกลับกันวิธีการสิ้นสุด () ได้ป้องกันตัวระบุการเข้าถึงเพื่อให้สมาชิกไม่สามารถเข้าถึงได้นอกชั้นเรียน
  6. วิธีการกำจัด () เป็นไปอย่างรวดเร็วและทำให้วัตถุเป็นอิสระในทันทีดังนั้นจึงไม่มีผลต่อต้นทุนการปฏิบัติงาน วิธีการสิ้นสุด () จะช้ากว่าและไม่ทำให้ทรัพยากรที่วัตถุถืออยู่นั้นว่างทันที

สรุป:

ขอแนะนำให้ใช้วิธีการกำจัด () เหนือวิธีการสิ้นสุด () เนื่องจากเร็วกว่าการสรุป นอกจากนี้ยังสามารถเรียกได้ตลอดเวลาเมื่อต้องการ