Refatorações

O conjunto de refatorações do ReSharper supera aquele fornecido pelo VisualStudio no que diz respeito ao número, à praticidade e ao escopo de aplicação. Cada refatoração analisa todo o escopo da seleção do código ao qual ela é aplicada (abrangendo a solução inteira), incluindo o código de linguagem cruzada, e usa essas percepções para atualizar o código da maneira mais inteligente possível.

Todas as refatorações do ReSharper funcionam em C#, a grande maioria também está disponível em VB.NET, enquanto algumas estão disponíveis em ASP.NET, JavaScript, TypeScript, XAML e outras linguagens com suporte.

Também é uma boa ideia conferir as ações de contexto do ReSharper que implementam transformações de código menos sofisticadas, principalmente locais, e não refatorações reais da maneira como são definidas por Martin Fowler.

Refactor This menu in C#

Usando refatorações de código

Para usar uma refatoração, você pode colocar o sinal de intercalação:

  • Em um símbolo no editor de texto.
  • Em uma seleção de código no editor de texto.
  • Em um arquivo ou seleção de arquivos na janela de ferramentas Solution Explorer.
  • Em um membro de tipo ou seleção de membros de tipo na janela de ferramentas File Structure ou em outra janela de ferramentas do ReSharper.

Depois disso, basta invocar uma refatoração necessária no Refactor do ReSharper ou usando seu atalho de teclado individual. Como alternativa, o comando Refactor ThisCtrl+Shift+R — permite que você veja quais refatorações podem ser aplicadas na posição atual do sinal de intercalação ou para a seleção atual.

Change Signature refactoring in ReSharper

Change Signature

Essa refatoração permite modificar uma assinatura de método das seguintes maneiras:

  • Adicionar, remover, renomear ou reordenar parâmetro(s)
  • Alterar tipo de retorno
  • Alterar tipos de parâmetros
  • Renomear métodos

Além de alterar a assinatura, o ReSharper pesquisa todos os usos do método e modifica todas as suas chamadas, implementações e substituições para refletir a alteração. No caso de parâmetros recém-adicionados, os valores padrão fornecidos pelo usuário são substituídos em todas as chamadas de métodos. Em substituições, o parâmetro original transmitido ao método é transmitido à chamada base.

Convert Extension Method to Static refactoring in ReSharper

Convert Extension Method to Plain Static

Essa refatoração sem caixa de diálogo converte um método de extensão em um método estático na mesma classe. A funcionalidade reversa é fornecida por Convert Static to Extension Method.

Convert Static to Extension Method

Essa refatoração converte um método estático em um método de extensão. Para que a conversão seja realizada com êxito, o método estático deve (1) ter pelo menos um argumento e (2) residir em uma classe estática. A funcionalidade inversa está disponível com Convert Extension Method to Plain Static.

Converting interface to abstract class with ReSharper's refactoring

Convert Interface to Abstract Class

Use essa refatoração se quiser adicionar alguma lógica a uma interface ou se preferir que essa interface seja uma classe. A refatoração verifica se há conflitos, isto é, tipos que implementam a interface e que já possuem um tipo base (um erro em C #, que não tem herança múltipla).

Convert Abstract Class to Interface

Você pode aplicar essa refatoração para converter uma classe abstrata em uma interface. Isso é especialmente útil quando você deseja que uma classe herde de mais de uma classe abstrata e, portanto, precisa converter uma delas em uma interface.

Extract Superclass refactoring in ReSharper

Extract Superclass

Com essa refatoração, você pode criar uma classe base para uma classe e mover alguns membros até ela. Basta colocar o sinal de intercalação em uma declaração de classe, selecionar membros para extrair e executar a refatoração. Ela é muito útil para mover a lógica de uma hierarquia de herança acima para compartilhá-la mais tarde.

Introduce Parameter refactoring in ReSharper

Introduce Parameter

Selecione uma expressão ou uma variável local em um método e use essa refatoração para criar um novo parâmetro a partir dela. Todos os pontos de chamadas serão atualizados para refletir a assinatura alterada, mantendo a lógica e a semântica.

Se uma expressão usar variáveis locais inacessíveis em um ponto de chamada, essa refatoração permitirá que elas sejam transmitidas como delegadas.

Make Method Static/Shared

Essa refatoração converte um método não estático em um estático (Shared no VB.NET) transformando this em um parâmetro do método. Após a refatoração, o método de destino será declarado como estático (Shared no VB.NET), e os parâmetros necessários serão adicionados aos seus pontos de chamadas. A refatoração também é útil quando você deseja mover métodos não estáticos (não Shared no VB.NET). Nesse caso, use "Make Method Static" como uma etapa preparatória para a refatoração "Make Method Non-static".

Make Method Non-Static/Non-Shared

Essa refatoração converte um método estático (Shared no VB.NET) em um método de instância no tipo do parâmetro selecionado (ou seja, move o método para o tipo de parâmetro e transforma o parâmetro em this) e transforma chamadas de métodos de acordo.

Move Instance Method

Usando essa refatoração, você pode mover rapidamente um método de instância do tipo atual para um dos tipos que aparecem nos parâmetros do método.

Move Static Member

Essa refatoração move campos e métodos estáticos para outro tipo. Se preferir mover métodos não estáticos, use Move Instance Method em vez disso.

Move String to Resource

Como parte do pacote de recursos de internacionalização do ReSharper, essa refatoração ajuda a extrair strings localizáveis em arquivos de recursos. Durante a refatoração, os usos de strings explícitos são substituídos por referências a wrappers de recursos.

Você pode chamar essa refatoração com seu atalho dedicado ou com o comando Refactor This. No entanto, o ReSharper também pode realçar strings que não são colocadas em arquivos de recursos como uma inspeção de código e sugerir a refatoração "Move String to Resource" como uma correção rápida. Consulte a Ajuda do ReSharper para saber mais sobre como configurar o ReSharper para fazer isso.

Pull Members Up

Essa refatoração ajuda a mover membros de tipo para uma superclasse ou uma interface. Essa operação é útil como uma maneira de generalizar o comportamento. O ReSharper analisa todos os membros da classe atual e cria uma lista daqueles que você pode enviar para cima. Antes de concluir a refatoração, o ReSharper também verifica possíveis conflitos, por exemplo, se os membros que você está tentando mover para uma superclasse estarão acessíveis no tipo de destino. A funcionalidade inversa está disponível com Push Members Down.

Push Members Down

Essa refatoração ajuda a limpar sua hierarquia de tipos, movendo membros de tipo para um subtipo. Essa operação é útil como uma maneira de especializar o comportamento. O ReSharper analisa todos os membros do tipo selecionado e cria uma lista daqueles que você pode enviar para baixo. Antes de concluir a refatoração, o ReSharper também verifica possíveis conflitos, por exemplo, se os membros que você está tentando enviar para baixo estarão acessíveis no tipo de destino. A funcionalidade inversa está disponível com Pull Members Up.

Pull Parameter refactoring in ReSharper

Pull Parameter

Quando você adiciona um novo parâmetro a um método — seja com uma correção rápida ou com a refatoração Change Signature — o ReSharper não só atualiza a assinatura e todos os usos do método, como também analisa a cadeia de chamadas da qual o método faz parte e permite "extrair" o novo parâmetro em qualquer lugar dessa cadeia.

Rename Refactoring in XAML

Renomear

A refatoração "Rename" permite renomear qualquer símbolo, incluindo: namespaces, tipos, métodos, parâmetros, variáveis locais, propriedades, campos e eventos. Ela localiza e corrige automaticamente todas as referências ao símbolo. A refatoração "Rename" pode ser invocada diretamente do editor e, às vezes, de outras visualizações (Class View, Object Browser).

Ela funciona com todas as linguagens e hierarquias com suporte, incluindo C#, VB.NET, JavaScript, ASP.NET, JavaScript, XML, XAML e scripts de compilação.

A correção automática de referências se estende totalmente à marcação XAML quando você usa a refatoração "Rename". Além disso, símbolos XAML específicos, como recursos e aliases de namespace, podem ser renomeados facilmente.

Para scripts de compilação, quando você renomeia uma propriedade ou um destino com o ReSharper, todas as suas referências e até mesmo usos em comentários e strings são atualizados automaticamente para refletir a alteração.

Transform Parameters refactoring in ReSharper

Transform Parameters

Essa refatoração cria uma nova classe ou struct e converte os parâmetros do método selecionado em campos encapsulados do tipo recém-criado. Os usos dos parâmetros são convertidos em usos de propriedades do tipo que está sendo criado.

Ele também permite livrar-se de parâmetros out: para métodos nulos, um ou vários parâmetros out são convertidos em um retorno que usa um objeto de tupla, se necessário, e, para métodos não nulos, eles podem ser combinados com o tipo de retorno existente — novamente, usando um objeto de tupla.

A refatoração Transform Parameters combina e substitui duas outras refatorações: Transform Out Parameters e Extract Class from Parameters.

Replace Constructor with Factory Method

Essa refatoração encapsula um construtor com um método estático que retorna uma nova instância de uma classe.

O padrão de Método de alocador é uma maneira de criar objetos sem especificar a classe exata do objeto que será criado. O ReSharper gera um método separado para criar objetos. Subclasses podem substituí-lo para especificar o tipo derivado de objeto que será criado.

Use Base Type where Possible

Com essa refatoração, seu código é generalizado com a substituição de usos de tipos específicos por referências ao seu tipo ou interface base, sempre que possível, ou seja, onde nenhum membro do tipo derivado é usado. Ela é especialmente útil após a refatoração Pull Members Up.

Copy Type

Você levará apenas um segundo para criar uma cópia de um tipo com um nome diferente ou dentro de outro namespace. O ReSharper cuidará da criação de um arquivo separado para essa cópia. Para tipos parciais, todas as partes serão copiadas, mesmo se estiverem localizadas em arquivos separados.

Convert Anonymous to Named Type

Essa refatoração converte tipos anônimos em tipos nomeados no escopo do método atual (localmente) ou de toda a solução (globalmente). Na caixa de diálogo apresentada por essa refatoração, você pode especificar se o ReSharper deve gerar propriedades automáticas ou propriedades com campos de suporte e também optar por gerar sobrecargas de métodos de igualdade e formatação.

Convert Indexer to Method

Essa refatoração funciona muito como Convert Property to Method, mas é aplicada a indexadores (propriedades padrão no VB.NET). Você pode converter somente getters, somente setters, ou ambos, em um método. A funcionalidade inversa é fornecida pela refatoração Convert Method to Indexer.

Convert Method to Indexer

É o inverso da refatoração Convert Indexer to Method. Ela funciona no modo sem caixa de diálogo, mas talvez seja necessário aplicá-la a dois métodos para gerar um getter e um setter no seu indexador.

Convert Method to Property

Essa refatoração permite que os usuários convertam métodos não nulos sem parâmetros em propriedades com acesso de leitura e métodos nulos com exatamente um parâmetro em propriedades com acesso de gravação. Métodos em pares podem ser convertidos em uma única propriedade de leitura/gravação.

Convert Property to Auto-Property

Essa refatoração ajuda a converter propriedades com campos de suporte particulares em propriedades automaticamente implementadas (também conhecidas como propriedades automáticas). A refatoração remove o campo de suporte e substitui todos os seus usos pela propriedade automática recém-criada.

Convert Property to Method refactoring in ReSharper

Convert Property to Method

Usando essa refatoração, propriedades com acesso de leitura podem ser convertidas em métodos do tipo "getter" (métodos não nulos sem parâmetros), enquanto propriedades com acesso de gravação podem ser convertidas em métodos do tipo "setter" (métodos nulos com exatamente um parâmetro). No que se refere a propriedades que permitem acesso de leitura e gravação, você pode convertê-las em pares de métodos dos tipos "getter" e "setter".

Extract Class refactoring in ReSharper

Extract Class

Você tem uma classe fazendo o trabalho que deveria na verdade ser feito por duas classes diferentes? Use essa refatoração para decompor uma classe complexa em duas classes de responsabilidades únicas. "Extract Class" ajuda você a escolher métodos e campos para passar da classe antiga para a nova classe. Ela também avisa sobre dependências desfeitas e problemas de acessibilidade e sugere opções de resolução de conflitos.

Extract Interface

Essa refatoração permite criar uma interface a partir de uma classe e fazer com que essa classe implemente a interface criada. Você pode escolher os membros a serem extraídos na interface e especificar um nome para essa interface.

Extract Method

Selecione um bloco de código e invoque a refatoração "Extract Method" para transformá-lo em um método (Sub ou Function no VB.NET). O ReSharper analisará o código automaticamente para detectar o valor de retorno e/ou os parâmetros out/ref.

Introduce Field

Selecione uma expressão ou uma variável local e aplique essa refatoração. Ela criará um novo campo ou constante e o inicializará com o inicializador de variável local ou expressão. O campo pode ser atribuído em seu inicializador, construtores de tipo ou membros atuais.

Inline Field

Quando um campo tem um único uso de gravação, essa refatoração substitui os usos de leitura do campo pela sua expressão de inicialização, excluindo a declaração do campo e o uso de gravação ao longo do caminho.

Encapsulate Field

A refatoração "Encapsulate Field" permite criar rapidamente uma propriedade acessadora a partir de um campo existente. Os usos do campo são substituídos automaticamente por usos da propriedade. Uma vantagem aparente dessa refatoração é a capacidade de proibir o acesso direto a um campo com o uso de propriedades.

Inline Method

Sempre que possível, essa refatoração é capaz de transferir o corpo de um método para o corpo de seus chamadores e remover esse método completamente. A funcionalidade inversa é fornecida pela refatoração Extract Method.

Introducing variable with ReSharper's refactoring

Introduce Variable

Selecione uma expressão arbitrária dentro do código-membro e invoque a refatoração Introduce Variable. Uma nova variável local de tipo implícito ou explícito será declarada e inicializada com a expressão selecionada. A expressão original será substituída pelo nome da variável. Se houver várias ocorrências da expressão original no seu código, você terá a opção de substituir todas elas pela variável recém-criada. Da mesma maneira, você também pode introduzir constantes para expressões constantes.

Inline Parameter

Essa refatoração ajuda a mover um parâmetro de um método até seu corpo. Por exemplo, se o mesmo valor constante for transmitido ao método em todas as suas chamadas, o parâmetro poderá ser removido, e a variável local correspondente poderá ser adicionada no corpo do método.

Inline Variable

Selecione uma variável arbitrária ou constante local e chame a refatoração "Inline Variable". Todas as ocorrências da variável selecionada no seu código serão substituídas pelo seu inicializador. A funcionalidade reversa é fornecida por Introduce Variable.

Introduce Variable for Substring refactoring

Introduce Variable for Substring

Essa refatoração ajuda a mover rapidamente uma parte de uma string para uma variável separada. Dependendo da versão C# de destino, a refatoração usará a interpolação de strings ou envolverá a string em String.Format().

Move Types into Matching Files refactoring in ReSharper

Move Types into Matching Files

Essa refatoração pode ser aplicada a um único arquivo ou a uma seleção de arquivos com vários tipos cada. O ReSharper cria arquivos dedicados para cada um desses tipos e os move para lá.

A refatoração "Move Types into Matching Files" é um auxiliar indispensável quando você prefere usar tipos inicialmente e depois declará-los com o recurso Criar a partir do uso do ReSharper.

Há também um atalho disponível para essa refatoração quando você pressiona Alt+Enter no nome de uma classe que não corresponde ao nome do arquivo na qual ela está inserida.

Move to Folder

Essa refatoração ajuda a mover uma classe, um arquivo ou uma seleção de classes ou arquivos para outro projeto ou pasta na solução. Ao executar a movimentação, o ReSharper atualiza as diretivas "using", se necessário. Opcionalmente, ele pode renomear namespaces de acordo com a nova localização e distribuir as classes que estão sendo movidas para arquivos separados.

Move Type to Outer Scope

Essa refatoração move um tipo interno para um nível superior. No caso de o tipo interno usar membros do tipo anexo, uma referência ao tipo anexo é transmitida como um argumento aos construtores do tipo movido. Essa refatoração pode ser acessada com o uso do comando "Move Refactoring".

Move Type to Another File or Namespace

Você pode mover tipos facilmente entre namespaces, com referências atualizadas automaticamente pelo ReSharper. Você também pode mover um tipo para um escopo externo ou aninhado ou para outro arquivo.
Usando essa refatoração, você pode mover rapidamente o código que implementa um determinado tipo para um arquivo separado. Essa refatoração pode ser acessada com o uso do comando "Move Refactoring".

Quando você usa XAML e move uma classe .NET para outro namespace, as referências da marcação XAML a essa classe são atualizadas, e diretivas de importação XAML são inseridas/alteradas de acordo. Essa refatoração também pode ser chamada diretamente da marcação XAML em qualquer referência de tipo.

Safe Delete

Se você for excluir um tipo, um membro de tipo ou qualquer outro símbolo em arquivos de código C# ou VB.NET, código e marcação ASP.NET, scripts de compilação ou XAML, use essa refatoração para garantir que a operação de exclusão seja segura. Se usos de símbolos não forem encontrados, ou se houver algum que possa ser recolhido com segurança, esse símbolo será excluído. Caso contrário, o ReSharper mostrará todos os usos que não é seguro excluir, permitindo que você edite o código correspondente.

Essa refatoração pode ser aplicada a uma seleção de arquivos ou membros de arquivos, permitindo excluir subsistemas inteiros com segurança.

Quando você invoca "Safe Delete" em um destino ou propriedade em um arquivo de compilação, o ReSharper faz todas as validações e operações necessárias para remover o símbolo selecionado. O ReSharper também pode remover todas as referências conflitantes para você.

Extract Members to Partial refactoring

Extract Members to Partial

Essa refatoração ajuda a mover rapidamente membros de tipo entre diferentes partes de tipos de classes parciais. Com base nas suas informações, a refatoração usará partes de tipos existentes ou criará novas.

Você pode até mesmo invocar essa refatoração via #region para mover todos os membros da região para um novo arquivo com um nome inferido do nome da região.

Nota sobre atalhos

Todos os atalhos de teclado fornecidos nesta página estão disponíveis no mapa de teclas "Visual Studio" padrão do ReSharper. Para obter detalhes sobre os dois mapas de teclas do ReSharper, consulte a Documentação do ReSharper.