Refactorización

El conjunto de refactorizaciones de ReSharper es superior al provisto por Visual Studio en cantidad, facilidad de uso y alcance de aplicación. Cada refactorización analiza todo el ámbito de la selección de código a la que se aplica (puede ser tan amplio como la solución completa), incluido código de otros lenguajes, y usa esta información para actualizar el código de la forma más inteligente posible.

Todas las refactorizaciones de ReSharper funcionan en C#, la gran mayoría también está disponible en VB.NET Y algunas en ASP.NET, XAML y otros lenguajes compatibles.

Vea también las acciones contextuales de ReSharper que implementan transformaciones menos sofisticadas, principalmente locales, y no refactorizaciones reales según la definición de Martin Fowler.

Menú "Refactor This" en C#

Uso de refactorizaciones de código

Para usar una refactorización, puede colocar el signo de intercalación:

  • En un símbolo en el editor.
  • En una selección de código en el editor de texto.
  • En un archivo o selección de archivos en la ventana de herramienta Solution Explorer.
  • En un miembro de tipo o una selección de miembros de tipo en File Structure u otra ventana de herramientas de ReSharper.

Después de eso, invoque la refactorización que necesite desde el menú Refactor de ReSharper o usando su acceso directo de teclado particular. De forma alternativa, el comando Refactor This (Ctrl+Mayús+R) le permite ver qué refactorizaciones se pueden aplicar en la posición actual del signo de intercalación o para la selección actual.

Refactorización Change Signature (Cambiar firma) en ReSharper

Change Signature (Cambiar firma)

Esta refactorización le permite modificar la firma de un método de las siguientes formas:

  • Añadir, quitar, cambiar nombre o reordenar parámetros
  • Cambiar el tipo de retorno
  • Cambiar tipos de parámetros
  • Cambiar nombre de método

Junto con el cambio de firma, ReSharper busca todos los usos del método y modifica todas las llamadas, implementaciones y anulaciones del método para reflejar el cambio. En caso de que se añadan nuevos parámetros, sus valores predeterminados asignados por el usuario se sustituyen en todas las llamadas de métodos. En las anulaciones, el parámetro original pasado al método se pasa a la llamada base.

Refactorización Convert Extension Method to Static (Convertir método de extensión a estático) en ReSharper

Convert Extension Method to Plain Static (Convertir método de extensión a estático simple)

Esta refactorización sin diálogo convierte un método de extensión en un método estático de la misma clase. La funcionalidad inversa la realiza Convert Static to Extension Method.

Convert Static to Extension Method (Convertir estático en método de extensión)

Esta refactorización convierte un método estático en un método de extensión. Para que la conversión se realice con éxito, el método estático debe (1) tener al menos un argumento y (2) residir en una clase estática. La funcionalidad inversa la realiza Convert Extension Method to Plain Static.

Refactorización de ReSharper para convertir una interfaz en una clase abstracta

Convert Interface to Abstract Class (Convertir interfaz a clase abstracta)

Use esta refactorización si desea añadir alguna lógica a una interfaz o considera que debería ser mejor una clase. La refactorización busca cualquier conflicto, es decir, para los tipos que implementan la interfaz que ya tienen un tipo base (un error en C#, que no tiene herencia múltiple).

Convert Abstract Class to Interface (Convertir clase abstracta en interfaz)

Puede aplicar esta refactorización para convertir una clase abstracta en una interfaz. Esto es particularmente útil cuando desea que una clase herede de más de una clase abstracta, y por lo tanto necesita convertir una de las mismas en una interfaz.

Refactorización Extract Superclass (Extraer superclase) en ReSharper

Extract Superclass (Extraer superclase)

Con esta refactorización puede crear una clase base para una clase y mover a ella algunos miembros. Tan solo coloque el signo de intercalación en la declaración de la clase, seleccione los miembros a extraer y ejecute la refactorización. Es muy útil para mover una lógica hacia arriba en una jerarquía de herencia para luego compartirla.

Refactorización Introduce Parameter (Introducir parámetro) en ReSharper

Introduce Parameter (Introducir parámetro)

Seleccione una expresión o variable local en un método y use esta refactorización para crear un nuevo parámetro a partir de la misma. Todos los sitios de llamada se actualizarán para reflejar el cambio de firma preservando la lógica y semántica.

Si una expresión usa variables locales inaccesibles en el sitio de la llamada, esta refactorización permite pasarlas como delegados.

Make Method Static/Shared (Definir método como estático/compartido)

Esta refactorización convierte un método no estático en uno estático ("Shared" en VB.NET) haciendo que this sea un parámetro del método. Después de refactorizar, el método objetivo se declarará como estático ("Shared" en VB.NET) y se añadirán los parámetros necesarios a sus posiciones de llamada. La refactorización también es útil cuando desea mover métodos no estáticos ("non-Shared" en VB.NET). En este caso, use Make Method Static como un paso de preparación para la refactorización Make Method Non-static.

Make Method Non-Static/Non-Shared (Definir método como no estático/no compartido)

Esta refactorización convierte un método estático ("Shared" en VB.NET) en un método de instancia en el tipo del parámetro seleccionado (es decir, mueve el método al tipo del parámetro y transforma el parámetro en this) y transforma las llamadas del método de forma acorde.

Move Instance Method (Mover instancia de método)

Con esta refactorización puede mover rápidamente un método de instancia desde el tipo actual a uno de los tipos que aparecen en los parámetros del método.

Move Static Member (Mover miembro estático)

Esta refactorización mueve campos y método estáticos a otro tipo. Si desea mover métodos no estáticos, use en su lugar Move Instance Method.

Move String to Resource (Mover cadena a recurso)

Esta refactorización, parte del paquete de funcionalidades de internacionalización de ReSharper, ayuda a extraer cadenas localizables en archivos de recursos. Durante la refactorización, los usos explícitos de cadenas se reemplazan con referencias a wrappers de recursos.

Puede invocar esta refactorización con su acceso directo dedicado o con el comando Refactor This. Sin embargo, ReSharper también puede resaltar cadenas que no se ponen en archivos de recursos como una inspección de código, y sugerir la refactorización Move String to Resource como arreglo rápido. Consulte la Ayuda de ReSharper para ver cómo configurar ReSharper para que haga esto.

Pull Members Up (Elevar miembros)

Esta refactorización le ayuda a mover miembros de tipo a una superclase o interfaz. Esta operación es útil como forma de generalizar un comportamiento. ReSharper analiza todos los miembros de la clase actual y hace una lista de miembros que puede elevar. Antes de completar la refactorización, ReSharper también busca posibles conflictos. Por ejemplo, si los miembros que intenta mover a una superclase estarán accesibles en el tipo de destino. La funcionalidad inversa la realiza Push Members Down.

Push Members Down (Descender miembros)

Esta refactorización le ayuda a limpiar su jerarquía de tipos moviendo miembros de tipos a un subtipo. Esta operación es útil como forma de especializar comportamientos. ReSharper analiza todos los miembros del tipo seleccionado y hace una lista de los miembros que puede descender. Antes de completar la refactorización, ReSharper también busca posibles conflictos. Por ejemplo, si los miembros que intenta descender estarán accesibles en el tipo de destino. La funcionalidad inversa la realiza Pull Members Up.

Refactorización Pull Parameter (Elevar parámetro) en ReSharper

Pull Parameter (Elevar parámetro)

Cuando añade un nuevo parámetro a un método (ya sea con un arreglo rápido o con la refactorización Change Signature) ReSharper no solo actualiza la firma y todos los usos del método, también analiza la cadena de llamadas de la que forma parte el método y le permite "elevar" el nuevo parámetro en cualquier lugar dentro de esta cadena.

Refactorización Rename (Cambiar nombre) en XAML

Rename (Cambiar nombre)

La refactorización Rename (Cambiar nombre) le permite cambiar el nombre de un símbolo, incluidos: espacios de nombres, tipos, métodos, parámetros, variables locales, propiedades, campos y eventos. Busca y corrige automáticamente todas las referencias al símbolo. La refactorización Rename se puede invocar directamente desde el editor y aveces desde otras vistas (Vista de clase, Navegador de objetos).

«Rename» funciona con todos los lenguajes y tecnologías compatibles, incluido C#, VB.NET, ASP.NET, XML, XAML y scripts de compilación.

La corrección automática de referencias se extiende completamente al marcado XAML cuando usa la refactorización Rename. Además, es posible cambiar el nombre fácilmente de símbolos específicos de XAML tales como recursos y alias de espacio de nombres.

Para scripts de compilación, cuando cambia el nombre de una propiedad u objetivo con ReSharper, todas sus referencias e incluso sus usos en comentarios y cadenas se actualizan automáticamente para reflejar el cambio.

Refactorización Transform Parameters (Transformar parámetros) en ReSharper

Transform Parameters (Transformar parámetros)

Esta refactorización crea una nueva clase o struct y convierte parámetros del método seleccionado en campos encapsulados del nuevo tipo creado. Los usos de parámetros se convierten en usos de propiedades del tipo que se está creando.

También le permite deshacerse de los parámetros out: para métodos void, uno o múltiples parámetros out se convierten a un retorno que usa un objeto tupla de ser necesario, y para métodos no void, se pueden combinar con el tipo de retorno existente (también en este caso usando un objeto tupla).

La refactorización Transform Parameters combina y reemplaza a otras dos refactorizaciones: Transform Out Parameters y Extract Class from Parameters.

Replace Constructor with Factory Method (Reemplazar constructor con método Factory)

Esta refactorización encapsula un constructor con un método estático que devuelve una nueva instancia de una clase.

El patrón de Método Factory es una forma de crear objetos sin especificar la clase exacta del objeto a crear. ReSharper genera un método separado para crear objetos. Las subclases pueden anularlo y sobrescribir el tipo derivado de objeto que se creará.

Use Base Type where Possible (Usar tipo base siempre que sea posible)

Con esta refactorización su código se generaliza mediante la sustitución de usos de tipos particulares con referencias a su tipo base o interfaces cuando sea posible; es decir, donde no se usan miembros del tipo derivado. Es particularmente útil después de la refactorización Pull Members Up.

Copy Type (Copiar tipo)

Le llevará apenas un segundo crear una copia de un tipo con un nombre diferente o dentro de otro espacio de nombres. ReSharper se encargará de crearle un archivo separado. Para los tipos parciales, todas las partes se copiarán incluso si están ubicadas en archivos separados.

Convert Anonymous to Named Type (Convertir tipo anónimo en tipo con nombre)

Esta refactorización convierte tipos anónimos en tipos con nombre en el ámbito ya sea del método actual (localmente) o de la solución completa (global). En el cuadro de diálogo que ofrece esta refactorización, puede especificar si ReSharper debería generar propiedades autoimplementadas o propiedades con campos de respaldo, así como optar si generar sobrecargas de métodos equalify y formatting.

Convert Indexer to Method (Convertir indexador en método)

Esta refactorización funciona muy parecido a Convert Property to Method pero también se aplica a indexadores (propiedades predeterminadas en VB.NET). Puede convertir sólo un getter, sólo un setter, o ambos, a un método. La funcionalidad inversa la realiza Convert Method to Indexer.

Convert Method to Indexer (Convertir método en indexador)

Esta es la inversa de Convert Indexer to Method. Funciona en modo sin diálogo, pero puede que necesite aplicarlo a dos métodos para generar tanto un getter y un setter en su indexador.

Convert Method to Property (Convertir método en propiedad)

Esta refactorización permite a los usuarios convertir métodos no void sin parámetros en propiedades con acceso de lectura, y métodos void con exactamente un parámetro en propiedades con acceso de escritura. Los métodos apareados se pueden convertir en una única propiedad de lectura/escritura.

Convert Property to Auto-Property (Convertir propiedad en propiedad autoimplementada)

Esta refactorización le ayuda a convertir propiedades con campos de respaldo privados en propiedades autoimplementadas (también conocidas como autopropiedades). La refactorización quita el campo de respaldo y sustituye todos sus usos con la nueva propiedad autoimplementadas.

Refactorización Convert Property to Method (Convertir propiedad en método) en ReSharper

Convert Property to Method (Convertir propiedad a método)

Al usar esta refactorización, las propiedades con acceso de lectura se pueden convertir en métodos tipo getter (métodos no void sin parámetros), y las propiedades con acceso de escritura se pueden convertir en métodos tipo setter (métodos void con exactamente un parámetro). Con respecto a las propiedades que permiten acceso tanto de lectura como de escritura, puede convertirlos en pares de métodos tipo getter y setter.

Refactorización Extract Class (Extraer clase) en ReSharper

Extract Class (Extraer clase)

¿Tiene una clase que hace un trabajo que realmente deberían hacer dos clases distintas? Use esta refactorización para descomponer una clase compleja en dos clases de una sola responsabilidad. Extract Class le ayudará a elegir métodos y campos para mover de la clase vieja a la nueva clase. También le advertirá sobre cualquier dependencia rota y problemas de accesibilidad, y sugerirá opciones de resolución de conflicto.

Extract Interface (Extraer interfaz)

Esta refactorización le permite crear una interfaz a partir de una clase y hacer que esa clase implemente la interfaz creada. Puede elegir los miembros a extraer a la interfaz y especificar un nombre para la interfaz.

Extract Method (Extraer método)

Seleccione un bloque de código e invoque la refactorización Extract Method para transformarlo en un método (Sub o Función en VB.NET). ReSharper analizará automáticamente el código para detectar el valor de retorno y/o los parámetros out/ref.

Introduce Field (Introducir campo)

Seleccione una expresión o variable local y aplique esta refactorización. Creará un nuevo campo o constante y la inicializará con la expresión o inicializador de variable local. El campo se puede asignar en su inicializador, constructores de tipo o miembros actuales.

Inline Field (Campo inline)

Cuando un campo tiene un uso de escritura único, esta refactorización sustituye los usos de lectura en el campo con su expresión de inicialización, eliminando a la vez la declaración de campo y el uso de escritura.

Encapsulate Field (Encapsular campo)

La refactorización Encapsulate Field le permite crear rápidamente una propiedad accessor a partir de un campo existente. Los usos del campo se sustituyen automáticamente con usos de la propiedad. Una ventaja de esta refactorización es que puede prohibir el acceso directo a un campo mediante el uso de propiedades.

Inline Method (Método inline)

Siempre que sea posible, esta refactorización es capaz de transferir el cuerpo de un método al cuerpo de sus invocadores y eliminar enteramente el método. La funcionalidad inversa la realiza Extract Method.

Introducir una variable con una refactorización de ReSharper

Introduce Variable (Introducir variable)

Seleccione una expresión arbitraria dentro del código miembro e invoque la refactorización Introduce Variable. Se declarará e inicializará una nueva variable local de tipo implícito o explícito con la expresión seleccionada. La expresión original será reemplazada con el nombre de la variable. Si existieran múltiples ocurrencias de la expresión original en su código, se le dará la opción de sustituirlas todas con la nueva variable creada. De la misma forma, también podrá introducir constantes para expresiones constantes.

Inline Parameter (Parámetro inline)

Esta refactorización le ayuda a mover un parámetro de un método hacia dentro de su cuerpo. Por ejemplo, si el mismo valor constante se pasa al método en todas sus invocaciones, entonces el parámetro se puede eliminar y se añade la variable local correspondiente al cuerpo del método.

Inline Variable (Variable inline)

Seleccione una constante local o variable arbitraria e invoque la refactorización "Inline Variable". Todas las ocurrencias de la variable seleccionada se sustituirán en su código con su inicializador. La funcionalidad inversa la realiza Introduce Variable.

Refactorización Introduce Variable (Introducir variable) para subcadena

Introduce Variable for Substring (Introducir variable para subcadena)

Esta refactorización le ayuda a mover rápidamente una parte de una cadena a una variable separada. Dependiendo de la versión de C# objetivo, la refactorización usará ya sea la interpolación de cadena o envolverá la cadena en un String.Format().

Refactorización Move Types into Matching Files (Mover tipos a archivos coincidentes) en ReSharper

Move Types into Matching Files (Mover tipos a archivos coincidentes)

Esta refactorización se puede aplicar a un archivo único a una selección de archivos cada uno de los cuales tienen múltiples tipos. ReSharper crea archivos dedicados para cada uno de esos tipos y los mueve allí.

"Move Types into Matching Files" es una ayuda indispensable si prefiere usar primero tipos y luego declararlos con la funcionalidad Create from Usage de ReSharper.

También hay un acceso directo para esta refactorización disponible presionando Alt+Intro sobre el nombre de una clase que no coincide con el nombre del archivo en el que está.

Move to Folder (Mover a carpeta)

Esta refactorización ayuda a mover una clase, un archivo o una selección de clases o archivos a otro proyecto o carpeta de la solución. Al ejecutar el movimiento, ReSharper actualiza las directivas "using" de ser necesario. Opcionalmente puede cambiar de nombre los espacios de nombre de acuerdo con la nueva ubicación y distribuir las clases que se mueven en archivos separados.

Move Type to Outer Scope (Mover tipo a ámbito exterior)

Esta refactorización mueve un tipo interior (inner) a un nivel superior. En caso de que el tipo interior use miembros del tipo envolvente, se pasa como argumento a los constructores del tipo movido. Puede acceder a esta refactorización a través del comando de refactorización Move.

Move Type to Another File or Namespace (Mover tipo a otro archivo o espacio de nombres)

Puede mover tipos entre espacios de nombres fácilmente, y ReSharper actualizará automáticamente las referencias. También puede mover un tipo al ámbito outer (exterior) o anidado o a otro archivo.
Al usar esta refactorización podrá mover rápidamente el código, implementando el tipo dado en un archivo separado. Puede acceder a esta refactorización a través del comando de refactorización Move.

Cuando usa XAML y mueve una clase .NET a otro espacio de nombres, se actualizan las referencias de marcado XAML a la clase y las directivas de importación XAML se insertan/cambian de forma acorde. También puede invocar esta refactorización directamente desde el marcado XAML en cualquier referencia de tipo.

Safe Delete (Eliminación segura)

Si va a eliminar un tipo, miembro de tipo o cualquier otro símbolo en archivos de código C# o VB.NET, código y marcado ASP.NET, scripts de compilación o XAML, use esta refactorización para asegurarse de que la operación de eliminación sea segura. Si no se encuentran usos de un símbolo, o si hay algunos que se pueden colapsar con seguridad, el símbolo se eliminará. De otra forma, ReSharper le mostrará todos los usos que no son seguros de eliminar, lo que le permitirá editar el código correspondiente.

Esta refactorización se puede aplicar a una selección de archivos o miembros de archivos, lo que le permite eliminar con seguridad subsistemas enteros.

Cuando invoca Safe Delete sobre un objetivo o una propiedad en un archivo de compilación, ReSharper realiza todas las validaciones y operaciones necesarias para eliminar el símbolo seleccionado. ReSharper también puede eliminar cualquier referencia que genere conflictos.

Refactorización Extract Members to Partial (Extraer miembros a parcial)

Extract Members to Partial (Extraer miembros a parcial)

Esta refactorización le ayuda a mover rápidamente miembros de tipo entre diferentes partes de tipo de clases parciales. Según usted elija, la refactorización usará usará las partes de tipo existentes o creará nueva.

Incluso puede invocar la refactorización sobre una #region para mover todos los miembros de la región a un nuevo archivo con un nombre que se infiere a partir del nombre de región.

Nota acerca de los accesos directos

Todos los acceso directo de teclado de esta página están disponibles en el mapa de teclas Visual Studio predeterminado de ReSharper. Para más información sobre los dos mapas de teclas de ReSharper, consulte la documentación de ReSharper.