Domanda

Nota : questa "caratteristica" è stata aggiunta a Visual Studio 2015, ma la questione terrà un po 'che non tutti gli sviluppatori o ogni negozio dev ottiene l'accesso alla più recente e più grande IDE non appena viene fuori.

domanda iniziale:

Normalmente non avrebbe "bisogno" o anche prendere in considerazione una caratteristica ridicolo come le regioni di codice all'interno di corpi di metodo, ma: Sto refactoring del codice VB.NET in cui i metodi di routine eseguiti cinquecento righe di codice o più ed i riferimenti sono così strettamente accoppiati che il codice sfida semplice refactoring come l'estrazione metodo.

E è per questo che ho pensato di provare le regioni all'interno di un corpo del metodo. Volevo solo di organizzare il codice per il breve termine. Ma l'IDE non mi permette (ha provocato un errore di compilazione.) Sono solo curioso di sapere perché? Sembra che le regioni di codice non dovrebbe avere un impatto il compilatore, intellisense ecc mi sto perdendo qualcosa? (Sempre con VS 2005 btw.)

Interessante: Questa sembra essere la lingua specifica. Va bene in C # (non ho controllato che inizialmente), ma non in VB.NET.

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

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

che ottiene un errore di compilazione, ma la versione C # è ok.

È stato utile?

Soluzione

Come di Novembre 2015:. in Visual Studio 2015 è ora supportato, basta fare quello che ti piace

Esempio di codice:

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

Nota: in versioni precedenti di Visual Studio sembra che non funziona in VB.NET, ma in C # si sta lavorando .

Altri suggerimenti

Credo che le regioni di codice probabilmente non sarebbero sostenuti in corpi di metodo dal momento che, come dici tu, sarebbe una (un po ') "caratteristica ridicolo" - Tuttavia, in C #, questo ha lavoro , almeno in VS 2008 e VS 2010 -. non solo in VB.NET

Detto questo, vorrei evitarlo. Mettere le regioni all'interno di un corpo di un metodo sarebbe solo porta a persone che fanno i metodi più grandi (dal momento che è l'unico momento in cui sarebbe utile), che è qualcosa che dovrebbe essere evitato, non incoraggiata.

Se il codice:

  

Sfida semplice refactoring come metodo di estrazione

mi concentrerò, invece, a fare "complesso" refactoring (o qualsiasi cosa) per cercare di rompere quei metodi. Non v'è alcun modo i vostri "quattro o cinquecento righe" metodi lunghi sono affatto mantenibile nel loro stato attuale.

Personalmente, mi avrebbe lasciato loro causando "dolore" -. Rendere evidente che hanno bisogno di lavorare, anteriore destro e centrale, fino a quando è possibile rompere e refactoring porzioni

Si è esplicito nel capitolo 3.3 del Visual Basic 9.0 Specifica del linguaggio:

  

Regione direttive linee di gruppo del codice sorgente, ma non hanno altro effetto sulla compilazione. L'intero gruppo può essere ripiegato e nascosto, o espanso e visualizzato, nell'ambiente di sviluppo integrato (IDE). Queste direttive sono speciali in quanto possono iniziare né terminare entro un corpo metodo

O in altre parole: non si può fare perché la specifica dice così.

Per quanto riguarda il motivo per cui è stato specificato come questo, mi sa che ha qualcosa a che fare con la funzionalità di IDE secolare che VB ha avuto per tutto il tempo che posso ricordare: Strumenti + Opzioni, Editor di testo, base, VB specifico, Mostra separatori di linea procedura. Questo è solo una supposizione, probabilmente non molto buona.


Aggiornamento:. Ora supportato da Roslyn, incluso prima con VS2015

Un altro semplice metodo alternativo:

Cosa si può fare è fondamentalmente selezionare il codice che si desidera aggiungere alla #Region #End Region e fondamentalmente clicca:

Ctrl + M , Ctrl + H

Questa avvolge sostanzialmente il codice. E poi per rendere ancora più ordinato e facile da trovare si può commentare il codice. Il risultato finale sarebbe simile a questa:

entrare descrizione dell'immagine qui

Non so su VB, ma in C # questo è stato permesso dal 1,0 per quanto ne sono a conoscenza.

regioni di codice In effetti, si può anche mettere in posti strani quali ambiti di croce. Ad esempio:

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

Ecco la regione si avvia all'interno dell'istruzione if, ma estremità di fuori di esso. Orribile, ma il compilatore va bene con esso.

Che cosa si intende quando hai detto che l'IDE non ha "lasciato" si inserisce il codice nelle regioni? Hai avuto un errore di compilazione?

Questa è stata semplicemente una scelta del team VB ha fatto quando si aggiungono le regioni dispongono nella versione 7 del linguaggio Visual Basic. Si è visto come una caratteristica che era utile per organizzare a livello dichiarazione e non all'interno di un metodo e quindi era consentito solo a quel livello.

Il team di C # pensava diversamente su questa funzione e lasciarlo in molti altri luoghi. Ho sempre trovato sorprendente che le direttive C # #region possono verificarsi in diversi contesti di dichiarazione.

#region Foo
class Bar {
#endregion

}

Il codice equivalente non è consentito in VB.

Per chi cerca la risposta più recente a questa domanda, questo è ora possibile in VB.NET (a partire da versione 14 via).

  

Regione direttive all'interno corpi dei metodi

     

È possibile inserire # Regione ... # End Regione delimitatori in qualsiasi punto un file, funzioni all'interno, e anche si estendono su corpi di funzione.

L'esempio dalla OP è ora sintassi perfettamente legale:

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

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

Visual Studio 2003 loro aveva per VB.NET, ma caratteristica è stata rimossa in Visual Studio 2005 e versioni successive. Davvero fastidioso quando refactoring grandi procedure, ma è possibile dividere la finestra del codice.

Onestamente, vorrei che C # sarebbe limitare l'uso regione perché sono eccessivamente utilizzati. Ho una macro che li strisce fuori di tutti i file di codice quando ereditare progetti C #.

Un'altra caratteristica rimosso era la lista dei metodi Overridable nella barra di navigazione . Posso controllare per vedere se si ri-aggiunto questa caratteristica per ogni nuova versione di Visual Studio dal 2005.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top