Pregunta

Nota: : Esta "característica" se ha añadido ahora a Visual Studio 2015, pero la cuestión llevará a cabo de un tiempo, ya que no todos los desarrolladores o cada tienda dev acceda a la mejor y más nuevo IDE tan pronto como sea que salga.

PREGUNTA ORIGINAL:

Normalmente yo no "necesidad" o incluso considerar una característica ridícula como regiones de código dentro de los cuerpos método, pero: Estoy refactorización de código VB.NET donde los métodos habitualmente corren quinientos líneas de código o más y las referencias son tan estrechamente unida que el código desafía sencilla refactorización tal como extracción método.

Y eso es por lo que me gustaría probar regiones dentro de un cuerpo de método. Sólo quería organizar el código para el corto plazo. Pero el IDE no me deja (dado lugar a un error de compilación.) Tengo curiosidad de por qué? Parece que las regiones de código no debería afectar el compilador, etc. intelisense Me estoy perdiendo algo? (Aún utilizando VS 2005 por cierto.)

Interesante: Esto parece ser específico del lenguaje. Aceptar que se encuentra en C # (I no comprobó que en un principio), pero no en VB.NET.

public module MyModule
    Sub RunSnippet()
        dim a as A = new A (Int32.MaxValue )

        #region 
        Console.WriteLine ("")
        #end region
       ....

que obtiene un error de compilación, pero la versión de C # es aceptable.

¿Fue útil?

Solución

Noviembre 2015:. en Visual Studio 2015 ahora es compatible, simplemente hacer lo que te gusta

Código de ejemplo:

With frmMain
#region "A sample region in odd place"
  .show()
  .text = "Sample"
#end region
End With

Nota: en versiones anteriores de Visual Studio parece que no está funcionando en VB.NET, pero en C # que está trabajando .

Otros consejos

Creo regiones de código probablemente no serían apoyadas en cuerpos de los métodos, ya que, como usted dice, sería una (algo) "característica ridícula" - Sin embargo, en C #, este hace trabajo , al menos en VS 2008 y VS 2010 -. pero no en VB.NET

Una vez dicho esto, me gustaría evitarlo. Poner regiones dentro de un cuerpo de método sería sólo conduce a la gente que hace métodos más grandes (ya que es el único momento en que valdría la pena), que es algo que debe ser evitado, no se anima.

Si su código:

  

desafía refactorización simples, tales como método de extracción

Me centrarse, en cambio, en hacer "complejo" refactorización (o lo que sea necesario) para tratar de romper esos métodos. No hay forma de sus "cuatro o quinientos líneas" métodos largos son en absoluto fácil de mantener en su estado actual.

En lo personal, yo los dejaría causar "dolor" -. Que sea obvio que necesitan trabajo, frente y al centro derecha, hasta que pueda romperlos y perfeccionar por porciones

Es explícita en el capítulo 3.3 de la especificación del lenguaje básico 9,0 visual:

  

Región de directivas de grupo de líneas de código fuente, pero no tienen otro efecto sobre la compilación. Todo el grupo se puede plegar y se oculta, o se expande y visto, en el entorno de desarrollo integrado (IDE). Estas directrices son especiales ya que no pueden ni empezar ni terminar dentro de un cuerpo de método

O en otras palabras: no puede hacerlo porque la especificación dice.

En cuanto a por qué se especificó como esta, creo que tiene algo que ver con la función IDE milenaria que VB ha tenido durante tanto tiempo como puedo recordar: Herramientas + Opciones, Editor de texto, Básico, VB específico, mostrar separadores de línea de procedimiento. Eso es sólo una suposición, probablemente no es una muy buena.


Actualización:. Ahora con el apoyo de Roslyn, incluyó por primera vez con VS2015

Otro método alternativo simple:

Lo que puede hacer es, básicamente, seleccionar el código que desea añadir el #Region #End Region y, básicamente, haga clic en:

Ctrl + M , Ctrl + H

Esto básicamente envuelve el código. Y a continuación, para que sea aún más limpio y fácil de encontrar se puede comentar el código. El resultado final sería algo como esto:

introducir descripción de la imagen aquí

No sé acerca de VB, pero en C # esto se ha permitido desde 1,0 hasta donde yo soy consciente.

regiones de código De hecho, incluso se puede poner en lugares extraños que alcances cruz. Por ejemplo:

class Test
{
    static void Main()
    {
        if (DateTime.Now.Hour > 12)
        {
#region Foo
            Console.WriteLine("Afternoon");            
        }
#endregion
    }
}

A continuación, la región se inicia dentro de la instrucción if, pero extremos fuera de ella. Horrible, pero el compilador está muy bien con él.

¿Qué quiere decir cuando dijo que el IDE no "dejar" lo escribe en las regiones? ¿Ha tenido un error de compilación?

Esto era simplemente una opción del equipo de VB hizo al añadir la función de las regiones en la versión 7 del lenguaje Visual Basic. Fue visto como una característica que era útil para la organización a un nivel de declaración y no dentro de un método y por lo tanto sólo se permitió a ese nivel.

El equipo de C # percibe de manera diferente acerca de esta característica y permitir que en muchos otros lugares. Siempre me ha parecido sorprendente que las directivas C # #region pueden aparecer en diferentes contextos de declaración.

#region Foo
class Bar {
#endregion

}

El código equivalente no está permitido en VB.

Para todos aquellos que buscan la respuesta más reciente a esta pregunta, esto es ahora posible en VB.NET (empezando desde versión 14 en).

  

Región directivas dentro de cuerpos de métodos

     

Se puede poner # # Fin ... Región Región delimitadores de cualquier parte de un archivo, dentro de las funciones, e incluso se extiende a través cuerpos de las funciones.

El ejemplo de la OP es ahora perfectamente legal sintaxis:

Sub RunSnippet()
    Dim a as A = New A (Int32.MaxValue )

    #Region "Test"
    Console.WriteLine ("")
    #End Region
End Sub

Visual Studio 2003 tenían para VB.NET, pero fue eliminado en función de Visual Studio 2005 y después. Realmente molesto cuando refactorización grandes procedimientos, sin embargo, se puede dividir la ventana de código.

Sinceramente, deseo C # restringiría el uso región ya que se utilizan excesivamente. Tengo una macro que tiras fuera de todos los archivos de código al heredar proyectos de C #.

Otra característica fue eliminado de la lista de métodos reemplazables en el Barra de navegación . Puedo comprobar para ver si se vuelve a agregar esta característica para cada nueva versión de Visual Studio desde 2005.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top