Cette documentation est archivée et n’est pas conservée.

Extraire la méthode

Extract Method est une opération Refactorisation qui offre un moyen simple de créer une nouvelle méthode à partir d'un fragment de code dans un membre existant.

L'opération Extract Method vous permet de créer une nouvelle méthode en extrayant une sélection de code de l'intérieur du bloc de code d'un membre existant. La nouvelle méthode créée contient le code sélectionné, et le code sélectionné dans le membre existant est remplacé par un appel à la nouvelle méthode. Transformer un fragment de code en sa propre méthode vous donne la possibilité de réorganiser rapidement et correctement le code pour une meilleure réutilisation et lisibilité.

Extract Method présente les avantages suivants :

  • Encourage l'application des méthodes conseillées pour le codage en mettant l'accent sur l'utilisation de méthodes discrètes et réutilisables.

  • Encourage le code auto-documenté via une bonne organisation. Lorsque des noms descriptifs sont utilisés, les méthodes de haut niveau peuvent se lire comme une série de commentaires.

  • Encourage la création de méthodes spécifiques pour simplifier la substitution.

  • Réduit la duplication de code.

Lorsque vous utilisez la commande Extraire la méthode, la nouvelle méthode est insérée à la suite du membre source dans la même classe.

Types partiels

Si la classe est un type partiel, Extract Method génère la nouvelle méthode qui suit immédiatement le membre de source. Extract Method détermine la signature de la nouvelle méthode, en créant une méthode statique lorsque aucune donnée d'instance n'est référencée par le code dans la nouvelle méthode.

Paramètres de type générique

Lorsque vous extrayez une méthode qui a un paramètre de type générique sans contrainte, le code généré n'ajoutera pas le modificateur "ref" à ce paramètre à moins qu'une valeur lui soit assignée. Si la méthode extraite prend en charge les types référence comme argument de type générique, vous devez ajouter manuellement le modificateur "ref" au paramètre dans la signature de méthode.

Méthodes anonymes

Si vous essayez d'extraire une partie d'une méthode anonyme qui inclut une référence à une variable locale qui est soit déclarée soit référencée en dehors de la méthode anonyme, Visual Studio vous avertit des changements sémantiques potentiels. Spécifiquement, les moments auxquels la valeur de la variable locale sera passée à la méthode anonyme différeront.

Lorsqu'une méthode anonyme utilise la valeur d'une variable locale, la valeur est obtenue au moment où la méthode anonyme est exécutée. Lorsqu'une méthode anonyme est extraite dans une autre méthode, la valeur de la variable locale est obtenue au moment de l'appel à la méthode extraite.

L'exemple suivant illustre ce changement sémantique : Si ce code est exécuté, 11 sera imprimé dans la console. Si vous utilisez la méthode Extraire pour extraire la région de code qui est marquée par les commentaires de code dans sa propre méthode, puis exécutez le code refactorisé, 10 sera imprimé dans la console.

class Program
{
    delegate void D();
    D d;
    static void Main(string[] args)
    {
        Program p = new Program();
        int i = 10;
        /*begin extraction*/
            p.d = delegate { Console.WriteLine(i++); };
        /*end extraction*/
        i++;
        p.d();
    }
}

Pour contourner cette situation, transformez en champs de la classe les variables locales qui sont utilisées dans la méthode anonyme.

Afficher: