Refactorisation de changement de nom (C#)

Renommer est une fonctionnalité de refactorisation dans l'environnement de développement intégré (IDE) de Visual Studio qui offre un moyen simple de renommer les identificateurs pour les symboles de code tels que les champs, les variables locales, les méthodes, les espaces de noms, les propriétés et les types.Renommer peut être utilisé pour modifier les noms dans les commentaires et les chaînes et pour modifier les déclarations et les appels d'identificateur.

[!REMARQUE]

Lors de l'utilisation du contrôle de code source pour Visual Studio, obtenez la version la plus récente de sources avant de tenter d'exécuter la refactorisation de changement de nom.

La refactorisation de changement de nom est disponible à partir des fonctionnalités Visual Studio suivantes :

Fonctionnalité

Comportement de la refactorisation dans l'IDE

Éditeur de code

Dans l'Éditeur de code, la refactorisation de changement de nom est disponible lorsque vous placez le curseur sur certains types de symbole de code.Lorsque le curseur est dans cette position, vous pouvez appeler la commande Renommer en tapant le raccourci clavier (CTRL + R, CTRL + R) ou en sélectionnant la commande Renommer dans une balise active, un menu contextuel ou le menu Refactoriser.

Affichage de classes

Lorsque vous sélectionnez un identificateur dans l'Affichage de classes, la refactorisation de changement de nom est disponible dans le menu contextuel et le menu Refactoriser.

Explorateur d'objets

Lorsque vous sélectionnez un identificateur dans l'Explorateur d'objets, la refactorisation de changement de nom est uniquement disponible dans le menu Refactoriser.

Grille des propriétés du Concepteur Windows Forms

Dans la Grille des propriétés du Concepteur Windows Forms, la modification du nom d'un contrôle déclenchera une opération de changement de nom pour ce contrôle.La boîte de dialogue Renommer n'apparaîtra pas.

Explorateur de solutions

Dans l' Explorateur de solutions, une commande Renommer est disponible dans le menu contextuel.Si le fichier source sélectionné contient une classe dont le nom de classe est identique au nom de fichier, vous pouvez utiliser cette commande pour renommer le fichier source et exécuter la refactorisation de changement de nom, simultanément.

Par exemple, si vous créez une application Windows par défaut, puis renommez Form1.cs en TestForm.cs, le nom de fichier source Form1.cs devient TestForm.cs et les classe Form1 et toutes les références à cette classe seront renommées en TestForm.

RemarqueRemarque
La commande Annuler (CTRL+Z) annulera uniquement la refactorisation de changement de nom dans le code, mais ne redonnera pas au fichier son nom d'origine.

Si le fichier source sélectionné ne contient pas une classe dont le nom est identique au nom de fichier, la commande Renommer de l' Explorateur de solutions renommera uniquement le fichier source et n'exécutera pas de refactorisation de changement de nom.

Changements de nom

Lorsque vous exécutez Renommer, le moteur de refactorisation exécute une opération de changement de nom spécifique pour chaque symbole de code, comme décrit dans le tableau suivant.

Symbole de code

Changement de nom

Champ

Remplace la déclaration et les utilisations du champ par le nouveau nom.

Variable locale

Modifie la déclaration et les utilisations de la variable en fonction du nouveau nom.

Méthode

Remplace le nom de la méthode et toutes les références à cette méthode par le nouveau nom.

RemarqueRemarque
Lorsque vous renommez une méthode d'extension, l'opération de changement de nom se propage à toutes les instances de la méthode qui sont dans la portée, indépendamment de si la méthode d'extension est utilisée en tant que méthode statique ou méthode d'instance.Pour plus d’informations, consultez Méthodes d'extension (Guide de programmation C#).

Espace de noms

Remplace le nom de l'espace de noms par le nouveau nom dans la déclaration, dans toutes les instructions using et dans les noms complets.

RemarqueRemarque
Lors du changement de nom d'un espace de noms, Visual Studio met aussi à jour la propriété Espace de noms par défaut sur la page Application du Concepteur de projets.Cette propriété ne peut pas être réinitialisée en sélectionnant Annuler dans le menu Edition.Pour réinitialiser la valeur de la propriété Espace de noms par défaut, vous devez modifier la propriété dans le Concepteur de projets.Pour plus d'informations, consultez la Page Application.

Property

Remplace la déclaration et les utilisations de la propriété par le nouveau nom.

Type

Modifie toutes les déclarations et toutes les utilisations du type en fonction du nouveau nom, y compris les constructeurs et les destructeurs.Pour les types partiels, l'opération de changement de nom se propagera à toutes les parties.

Pour renommer un identificateur

  1. Créez une application console nommée RenameIdentifier, puis remplacez Program par l'exemple de code suivant.

    class ProtoClassA
    {
        // Invoke on 'MethodB'.
        public void MethodB(int i, bool b) { }
    }
    
    class ProtoClassC
    {
        void D()
        {
            ProtoClassA MyClassA = new ProtoClassA();
    
            // Invoke on 'MethodB'.
            MyClassA.MethodB(0, false);
        }
    }
    
  2. Placez le curseur sur MethodB, soit dans la déclaration de méthode, soit dans l'appel de méthode.

  3. Dans le menu Refactoriser, sélectionnez Renommer.La boîte de dialogue Renommer s'affiche.

    Vous pouvez également cliquer avec le bouton droit sur le curseur, pointer sur Refactoriser dans le menu contextuel, puis cliquer sur Renommer pour afficher la boîte de dialogue Renommer.

  4. Dans le champ Nouveau nom, tapez MethodC.

  5. Activez la case à cocher Rechercher dans les commentaires.

  6. Cliquez sur OK.

  7. Dans la boîte de dialogue Aperçu des modifications, cliquez sur Appliquer.

Pour renommer un identificateur à l'aide de balises actives

  1. Créez une application console nommée RenameIdentifier, puis remplacez Program par l'exemple de code suivant.

    class ProtoClassA
    {
        // Invoke on 'MethodB'.
        public void MethodB(int i, bool b) { }
    }
    
    class ProtoClassC
    {
        void D()
        {
            ProtoClassA MyClassA = new ProtoClassA();
    
            // Invoke on 'MethodB'.
            MyClassA.MethodB(0, false);
        }
    }
    
  2. Dans la déclaration pour MethodB, tapez ou effectuez un retour arrière sur l'identificateur de méthode.Une invite de balise active apparaît au-dessous de cet identificateur.

    [!REMARQUE]

    Vous pouvez uniquement appeler la refactorisation de changement de nom à l'aide de balises actives à la déclaration d'un identificateur.

  3. Tapez le raccourci clavier MAJ+ALT+F10, puis appuyez sur la flèche Bas pour afficher le menu Balise active.

    ou

    Placez le pointeur de la souris au-dessus de l'invite de balise active, pour afficher la balise active.Déplacez ensuite le pointeur de la souris sur la balise active et cliquez sur la touche Bas pour afficher le menu de balise active.

  4. Sélectionnez l'élément de menu Renommer '<identificateur1>' en '<identificateur2>', pour appeler la refactorisation de changement de nom sans aperçu des modifications à votre code.Toutes les références à <identificateur1> seront automatiquement mises à jour en <identificateur2>.

    ou

    Sélectionnez l'élément de menu Renommer avec l'aperçu, pour appeler la refactorisation de changement de nom avec un aperçu des modifications apportées à votre code.La boîte de dialogue Aperçu des modifications apparaît.

Notes

Changement de nom des membres implémentés ou substitués

Lorsque vous utiliser Renommer pour modifier le nom d'un membre qui implémente/substitue ou est implémenté/substitué par les membres d'autres types, Visual Studio affiche une boîte de dialogue qui prévient que l'opération de changement de nom provoquera des mises à jour en cascade.Si vous cliquez sur Continuer, le moteur de refactorisation recherche de manière récursive et renomme tous les membres de type de base et type dérivés ayant des relations d'implémentation/substitution avec le membre renommé.

L'exemple de code suivant contient des membres avec des relations implémente/substitue.

interface IBase
{
    void Method();
}
public class Base
{
    public void Method()
    { }
    public virtual void Method(int i)
    { }
}
public class Derived : Base, IBase
{
    public new void Method()
    { }
    public override void Method(int i)
    { }
}
public class C : IBase
{
    public void Method()
    { }
}

Dans l'exemple précédent, le changement de nom C.Method() renomme également Ibase.Method(), car C.Method() implémente Ibase.Method().Ensuite, le moteur de refactorisation voit de manière récursive que l'interface Ibase.Method() est implémentée par Derived.Method() et renomme Derived.Method().Le moteur de refactorisation ne renomme pas Base.Method(), parce que Derived.Method() ne substitue pas Base.Method().Le moteur de refactorisation s'arrête alors, à moins que la case à cocher Renommer les surcharges ne soit activée dans la boîte de dialogue Renommer.

Si la case à cocher Renommer les surcharges est activée, le moteur de refactorisation renomme Derived.Method(int i) parce qu'il surcharge Derived.Method(), Base.Method(int i) parce qu'il est substitué par Derived.Method(int i), et Base.Method() parce que c'est une surcharge de Base.Method(int i).

[!REMARQUE]

Lorsque vous renommez un membre qui a été défini dans un assembly référencé, une boîte de dialogue explique que ce changement de nom provoquera des erreurs de build.

Changement de nom de propriétés de types anonymes

Lorsque vous renommez une propriété dans des types anonymes, l'opération de changement de nom se propagera aux propriétés dans les d'autres types anonymes qui ont les mêmes propriétés.Les exemples suivants illustrent ce comportement.

var a = new { ID = 1};
var b = new { ID = 2};

Dans le code précédent, ID modifiera ID dans les deux instructions parce qu'elles ont le même type anonyme sous-jacent.

var companyIDs =
    from c in companylist
    select new { ID = c.ID, Name = c.Name};

var orderIDs =
    from o in orderlist
    select new { ID = o.ID, Item = o.Name};

Dans le code précédent, le changement du nom de l' ID renommera uniquement une instance d' ID car companyIDs et orderIDs n'ont pas les mêmes propriétés.

Voir aussi

Référence

Types anonymes (Guide de programmation C#)

Concepts

Refactorisation (C#)