NET IDisposable Pattern หมายความว่าหากคุณเขียน Finalizer และใช้ IDisposable โปรแกรมสุดท้ายของคุณจะต้องเรียก Dispose อย่างชัดเจน นี่เป็นเหตุผลและเป็นสิ่งที่ฉันทำมาโดยตลอดในสถานการณ์ที่หายากซึ่งมีการรับประกันขั้นสุดท้าย
อย่างไรก็ตามจะเกิดอะไรขึ้นถ้าฉันทำสิ่งนี้:
class Foo : IDisposable
{
public void Dispose(){ CloseSomeHandle(); }
}
และอย่าใช้โปรแกรมปิดท้ายหรืออะไรเลย เฟรมเวิร์กจะเรียกเมธอด Dispose ให้ฉันหรือไม่
ใช่ฉันรู้ว่านี่ฟังดูโง่และตรรกะทั้งหมดก็บอกเป็นนัยว่ามันจะไม่เกิดขึ้น แต่ฉันมักจะมี 2 สิ่งที่ด้านหลังศีรษะซึ่งทำให้ฉันไม่แน่ใจ
เมื่อสองสามปีก่อนเคยบอกฉันว่ามันจะทำได้จริงและคน ๆ นั้นมีประวัติที่มั่นคงมากว่า "รู้เรื่องของพวกเขา"
คอมไพเลอร์ / เฟรมเวิร์กทำสิ่ง 'เวทมนตร์' อื่น ๆ ขึ้นอยู่กับอินเทอร์เฟซที่คุณใช้ (เช่น foreach, extension method, serialization ตามคุณสมบัติ ฯลฯ ) ดังนั้นจึงสมเหตุสมผลว่านี่อาจเป็น 'magic' ด้วย
ในขณะที่ฉันได้อ่านสิ่งต่างๆมากมายเกี่ยวกับเรื่องนี้และมีหลายสิ่งหลายอย่างที่บ่งบอกเป็นนัยว่าฉันไม่เคยพบคำตอบที่ชัดเจนใช่หรือไม่ใช่สำหรับคำถามนี้