IDisposable และคำสั่ง using
นำ IDisposable ไปใช้งาน ใช้คำสั่ง using เพื่อทำความสะอาดทรัพยากรอย่างแน่นอน และเปรียบเทียบกับ try/finally แบบทำเอง สำหรับ C# 6 เท่านั้น
IDisposable และคำสั่ง using เป็นบทเรียน C# Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 3 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน C# Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส C# Academy มีบทเรียนทั้งหมด 3 บทเรียน
เหตุผลที่ใช้ IDisposable และ using
เป้าหมาย: ปลดปล่อยทรัพยากรอย่างแน่นอน
- ใช้งาน IDisposable
- ใช้คำสั่ง using (C# 6)
- เปรียบเทียบกับ try/finally
- ทำให้การทำความสะอาดมีขนาดเล็กและปลอดภัย
ใช้งาน IDisposable
ใช้งาน IDisposable.Dispose เพื่อปล่อยทรัพยากร (ไฟล์ ซ็อกเก็ต แฮนเดิล) และทำให้การทำงานซ้ำได้อย่างปลอดภัย
using System;
// Simple disposable that tracks whether it was cleaned up
public sealed class FakeConnection : IDisposable
{
public bool IsOpen { get; private set; }
public FakeConnection()
{
IsOpen = true;
Console.WriteLine("Open");
}
public void Dispose()
{
if (IsOpen)
{
IsOpen = false;
Console.WriteLine("Close");
}
}
}
public class Program
{
public static void Main(string[] args)
{
FakeConnection c = new FakeConnection();
c.Dispose(); // manual cleanup
}
}
รูปแบบ try/finally
try/finally รับประกันการทำความสะอาด แต่มีโค้ดมากและลืมได้ง่าย คำสั่ง using เป็นรูปแบบย่อ
using System;
public sealed class FakeConnection : IDisposable
{
public void Dispose() { Console.WriteLine("Dispose called"); }
public void Send(string msg) { Console.WriteLine("Send: " + msg); }
}
public class Program
{
public static void Main(string[] args)
{
// Manual try/finally
FakeConnection a = null;
try
{
a = new FakeConnection();
a.Send("A");
throw new Exception("boom");
}
finally
{
if (a != null) a.Dispose(); // runs even on exception
}
// unreachable due to thrown exception in this demo
}
}
ตัวอย่างคำสั่ง using
คำสั่ง using จะห่อหุ้ม try/finally ที่ซ่อนอยู่ และจะเรียก Dispose เมื่อจบบล็อก
using System;
public sealed class FakeConnection : IDisposable
{
public void Dispose() { Console.WriteLine("Dispose called"); }
public void Work() { Console.WriteLine("Working"); }
}
public class Program
{
public static void Main(string[] args)
{
try
{
using (FakeConnection c = new FakeConnection())
{
c.Work();
throw new InvalidOperationException("oops");
} // Dispose runs here automatically
}
catch (Exception)
{
Console.WriteLine("Handled");
}
}
}
I/O ด้วย using
ชนิด I/O ส่วนใหญ่ใช้งาน IDisposable ใช้ using เพื่อให้แฮนเดิลถูกปิดอย่างรวดเร็ว
using System;
using System.IO;
public class Program
{
public static void Main(string[] args)
{
// Create a small temp file then read it
string path = "demo.txt";
File.WriteAllText(path, "hello");
using (StreamReader r = new StreamReader(path))
{
string text = r.ReadToEnd();
Console.WriteLine(text);
} // r.Dispose() closes the file handle
}
}
เคล็ดลับและข้อควรระวังเรื่อง using
เคล็ดลับ:
- เลือกใช้ using แทนการเรียก Dispose ด้วยตนเอง
- ทำให้ Dispose มีขนาดเล็กและปลอดภัย (หากเป็นไปได้อย่าให้เกิดข้อยกเว้น)
- อย่าใช้ออบเจ็กต์หลังจากถูกทำลายแล้ว
- สำหรับทรัพยากรหลายรายการ ให้ซ้อนบล็อก using เพื่อควบคุมลำดับ
การรับประกันของคำสั่ง using
ทบทวน
ทบทวน: ใช้งาน IDisposable กับทรัพยากร และห่อการใช้งานไว้ในบล็อก using เพื่อให้แน่ใจว่ามีการทำความสะอาดผ่าน try/finally ที่ซ่อนอยู่ใน C# 6
คำถามที่พบบ่อย
บทเรียน “IDisposable และคำสั่ง using” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “IDisposable และคำสั่ง using” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส C# Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส C# Academy มีบทเรียนทั้งหมด 3 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “IDisposable และคำสั่ง using”
นำ IDisposable ไปใช้งาน ใช้คำสั่ง using เพื่อทำความสะอาดทรัพยากรอย่างแน่นอน และเปรียบเทียบกับ try/finally แบบทำเอง สำหรับ C# 6 เท่านั้น คุณปฏิบัติ C# Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน C# Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน C# Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 3 บทเรียน
บทเรียน “IDisposable และคำสั่ง using” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน C# Academy นี้ได้ไหม
ได้ บทเรียน C# Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- try/catch/finally, throw new เทียบกับการโยนซ้ำ
- ข้อยกเว้นแบบกำหนดเองและการออกแบบข้อผิดพลาด
- IDisposable และคำสั่ง using