Si le type implémente IDisposable, il dispose automatiquement de ce type.
Étant donné :
public class SomeDisposableType : IDisposable
{
...implmentation details...
}
Ils sont équivalents :
SomeDisposableType t = new SomeDisposableType();
try {
OperateOnType(t);
}
finally {
if (t != null) {
((IDisposable)t).Dispose();
}
}
using (SomeDisposableType u = new SomeDisposableType()) {
OperateOnType(u);
}
La seconde est plus facile à lire et à entretenir.
Depuis C# 8, il existe un nouvelle syntaxe pour using
qui peut rendre le code plus lisible :
using var x = new SomeDisposableType();
Il n'a pas de { }
et la portée de l'utilisation va du point de déclaration à la fin du bloc dans lequel elle est déclarée. Cela signifie que vous pouvez éviter des choses comme :
string x = null;
using(var someReader = ...)
{
x = someReader.Read();
}
Et prenez ça :
using var someReader = ...;
string x = someReader.Read();