Looking for c# Answers? Try Ask4KnowledgeBase
Looking for c# Keywords? Try Ask4Keywords

C# Language Utilisation des principes de base de l'instruction


Exemple

using du sucre syntaxique vous permet de garantir qu'une ressource est nettoyée sans avoir besoin d'un bloc try-finally explicite. Cela signifie que votre code sera beaucoup plus propre et que vous ne perdrez pas de ressources non gérées.

Standard Dispose motif de nettoyage, pour les objets qui mettent en œuvre l' IDisposable interface (dont le FileStream classe de base de Stream fait en .NET):

int Foo()
{
    var fileName = "file.txt";

    {
        FileStream disposable = null;

        try
        {
            disposable = File.Open(fileName, FileMode.Open);

            return disposable.ReadByte();
        }
        finally
        {
            // finally blocks are always run
            if (disposable != null) disposable.Dispose();
        }
    }
}

using simplifie votre syntaxe en masquant le try-finally explicite:

int Foo()
{
    var fileName = "file.txt";

    using (var disposable = File.Open(fileName, FileMode.Open))
    {
        return disposable.ReadByte();
    }
    // disposable.Dispose is called even if we return earlier
}

Tout comme finally blocs s'exécutent toujours indépendamment des erreurs ou des retours, en using toujours les appels Dispose() , même en cas d'erreur:

int Foo()
{
    var fileName = "file.txt";

    using (var disposable = File.Open(fileName, FileMode.Open))
    {
        throw new InvalidOperationException();
    }
    // disposable.Dispose is called even if we throw an exception earlier
}

Remarque: L' appel de Dispose étant garanti quel que soit le flux de code, assurez-vous que Dispose ne lève jamais une exception lorsque vous implémentez IDisposable . Sinon, une exception réelle serait remplacée par la nouvelle exception, ce qui entraînerait un cauchemar de débogage.

Retourner de l'utilisation du bloc

using ( var disposable = new DisposableItem() )
{
    return disposable.SomeProperty;
}

En raison de la sémantique de try..finally à laquelle le bloc using traduit, l'instruction return fonctionne comme prévu - la valeur de retour est évaluée avant que finally bloc n'est exécuté et que la valeur ne soit éliminée. L'ordre d'évaluation est le suivant:

  1. Evaluer le corps d' try
  2. Évaluer et mettre en cache la valeur renvoyée
  3. Exécuter enfin le bloc
  4. Renvoie la valeur de retour mise en cache

Cependant, vous ne pouvez pas retourner la variable disposable lui - même, car elle non valide est disposé référence - voir exemple connexe .