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.
Para usar una refactorización, puede colocar el signo de intercalación:
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.
Esta refactorización le permite modificar la firma de un método de las siguientes formas:
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.
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.
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.
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).
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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á.
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.
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.
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.
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.
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.
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.
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.
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.
¿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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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()
.
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á.
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.
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.
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.
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.
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.
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.