Que signifie cette instruction dans C#?Que signifie utiliser (object obj = new Object())?
using (object obj = new object())
{
//random stuff
}
Que signifie cette instruction dans C#?Que signifie utiliser (object obj = new Object())?
using (object obj = new object())
{
//random stuff
}
Cela signifie que obj
implémente IDisposible
et seront éliminés de manière appropriée après le bloc using
. Il est fonctionnellement identique à:
{
//Assumes SomeObject implements IDisposable
SomeObject obj = new SomeObject();
try
{
// Do more stuff here.
}
finally
{
if (obj != null)
{
((IDisposable)obj).Dispose();
}
}
}
using (object obj = new object())
{
//random stuff
}
équivaut à:
object obj = new object();
try
{
// random stuff
}
finally {
((IDisposable)obj).Dispose();
}
Presque équivalent. Dans le premier exemple, obj est hors de portée au}. Dans la seconde, il est toujours dans la portée. Similaire à l'équivalence de temps en temps. –
il est un moyen de champ d'un objet si la méthode est appelée Éliminez la sortie. C'est très utile pour les connexions de bases de données en particulier. une erreur de compilation se produira si l'objet n'implémente pas idisposable
using
garantit que l'objet alloué est correctement éliminé après l'utilisation du bloc, même lorsqu'une exception non gérée se produit dans le bloc.
pourquoi existe t-il?
Il existe pour les classes où vous vous souciez de leur durée de vie, en particulier lorsque la classe enveloppe une ressource dans le système d'exploitation et que vous souhaitez la libérer immédiatement. Sinon, vous devrez attendre les finaliseurs du CLR (non déterministes).
Exemples, descripteurs de fichiers, connexions DB, des connexions socket, ....
Il est sucre syntaxique –
je ne suis pas d'accord - c'est un modèle bien connu et encourage ainsi la bonne pratique commune. pour boucle est aussi le sucre syntaxique - mais il est toujours utilisé car c'est un idiome commun aussi j'essayais d'expliquer pourquoi vous le voyez utilisé - et pourquoi vous verriez la version sans sucre – pm100
Pour votre future référence, cela est documenté dans la section 8.13 de la spécification C#. –