Forgetting to dispose resources causes memory leaks. using statement guarantees disposal even if exception occurs.
❌ Manual Disposal (Risky):
var stream = File.OpenRead("file.txt");
// If exception here, stream never closed!
var data = ReadData(stream);
stream.Dispose();
✅ Automatic (Safe):
using (var stream = File.OpenRead("file.txt"))
{
var data = ReadData(stream);
} // stream.Dispose() called automatically, even on exception!
C# 8+ Simplified:
using var stream = File.OpenRead("file.txt");
// Disposed at end of method automatically
Never leak file handles, connections, or locks again!
