Using statement ใน .NET Core 3 และ C#8

Using statement ใน .NET Core 3 และ C#8
เมื่อเรามีการเขียนคำสั่งในการสร้างอ็อบเจกต์ จะมีการใช้พึ้นที่บนหน่วยความจำในการเก็บค่าต่าง ๆแต่ปกติเราไม่จำเป็นต้องทำลายอ็อบเจกต์ เพราะอ็อบเจกต์ส่วนใหญ่จะถูก garbage collector นำไปทำลายโดยอัตโนมัติเมื่อหมดหน้าที่การทำงานแล้ว
แต่บางครั้งเราอาจต้องการทำลายอ็อบเจกต์ด้วยตนเองเพื่อปลดปล่อยทรัพยากร (เช่น file, font และ communication port)
ซึ่งไม่ใช่ทุกอ็อบเจกต์ที่เราจะสามารถสั่งทำลายได้ แต่ต้องเป็นอ็อบเจกต์ที่เกิดจาก class ที่ implement interface แบบ IDisposable
class ที่ implement interface แบบ IDisposable มักเป็น managed type ที่เรียกใช้ unmanaged resources เช่น file และ font
การทำลาย object แบบ IDisposable สามารถทำได้สะดวกโดยใช้ using statement
รูปแสดงวิธีเขียนโค้ดที่ใช้ using statement เพื่อใช้ทำลาย object แบบ IDisposable
- บรรทัดที่ 16-19: การเขียน using statement แบบคลาสสิก object font ซึ่งเป็น IDisposable object จะถูกทำลายทันทีที่ code ไหลผ่าน block using
- บรรทัดที่ 21,22: การเขียน using statement แบบใหม่ที่เริ่มมีใน C# 8.0 ไม่ต้องทำ code block
- บรรทัดที่ 25-36: การเขียน using statement (ทั้งแบบ classic และแบบ C# 8.0) ให้หลักประกันว่า object จะถูกทำลายแม้จะเกิด exception ขึ้น เมื่อเรา compile โค้ด ตัว compile จะทำงานเหมือนกับว่าเราเขียนโค้ดไว้แบบนี้ คือมีการเรียก method Dispose ไว้ที่ finally ที่ช่วยให้ method Dispose ถูกเรียกอย่างแน่นอน แม้จะมี exception เกิดขึ้น
- บรรทัดที่ 38-43: เพื่อความกระชับ เราอาจเขียน using statement เพียงครั้งเดียว กับมากกว่าหนึ่ง object ได้ นี่คือตัวอย่างการเขียนแบบ classic
- บรรทัดที่ 46,47: เพื่อความกระชับ เราอาจเขียน using statement เดียวกับมากกว่าหนึ่ง object ได้ นี่คือตัวอย่างการเขียนแบบ C# 8.0
- บรรทัดที่ 45-57: เราอาจสร้าง object ไว้ก่อนแล้วจึงส่ง object ไปให้ using statement ภายหลังก็ได้