Question

Remarque : Cette « fonctionnalité » a été ajouté à Visual Studio 2015, mais la question tiendra un certain temps car tous les développeurs ou chaque magasin dev donne accès à la plus récente et IDE dès que il sort.

QUESTION ORIGINAL:

Normalement, je ne « besoin » ou même d'envisager une caractéristique ridicule comme les régions de code au sein des instances de la méthode, mais: Je suis refactoring code VB.NET où exécuter des méthodes couramment cinq cents lignes de code ou plus et les références sont si étroitement couplé que le code défie simples refactoring telles que l'extraction de la méthode.

Et voilà pourquoi je pensais que je voudrais essayer des régions au sein d'un corps de méthode. Je voulais juste d'organiser le code pour le court terme. Mais l'IDE ne me laisse pas (a entraîné une erreur du compilateur.) Je suis curieux de savoir pourquoi? On dirait que les régions de code ne devrait pas influer sur le compilateur, IntelliSense etc. Am quelque chose que je manque? (Toujours en utilisant VS 2005 btw.)

Intéressant: Cela semble être un langage spécifique. Il va bien en C # (je ne l'ai pas vérifié qu'au départ), mais pas dans VB.NET.

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

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

qui obtient une erreur de compilation, mais la version C # est ok.

Était-ce utile?

La solution

Novembre 2015:. Visual Studio 2015 il est maintenant pris en charge, faire tout ce que vous aimez

Exemple de code:

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

Remarque: versions antérieures de Visual Studio, il semble que cela ne fonctionne pas en VB.NET, mais en C #, il travaille .

Autres conseils

Je pense que les régions de code ne serait probablement pas pris en charge dans les organes de la méthode car ils, comme vous le dites, serait un (peu) « caractéristique ridicule » - Cependant, en C #, cette fait travail , au moins dans VS 2008 et VS 2010 -. tout simplement pas dans VB.NET

Cela étant dit, je l'éviter. Mettre les régions au sein d'un corps de méthode serait tout simplement conduit à des gens qui font des méthodes plus grandes (puisque c'est le seul moment où il serait utile), ce qui est quelque chose qui devrait être évité, pas encouragé.

Si votre code:

  

défie de refactoring simples telles que l'extraction méthode

Je me concentrerais plutôt à faire « complexe » refactoring (ou tout ce qu'il faut) pour essayer de briser ces méthodes. Il n'y a aucun moyen de votre « quatre ou cinq cents lignes » méthodes longues sont tout maintenable dans leur état actuel.

Personnellement, je les laisse causer « douleur » -. Rendre évident qu'ils ont besoin de travailler, juste avant et au centre, jusqu'à ce que vous pouvez les briser et refactor des portions

Il est explicite dans le chapitre 3.3 de Visual Basic 9.0 Spécification du langage:

  

Région directives que les lignes de groupe de code source, mais avoir d'autre effet sur la compilation. Le groupe entier peut être replié et caché, ou agrandi et vu, dans l'environnement de développement intégré (IDE). Ces directives sont particulières en ce sens qu'ils ne peuvent ni commencer, ni mettre fin à l'intérieur d'un corps de méthode

Ou autrement dit: vous ne pouvez pas le faire parce que la spécification dit.

Quant à savoir pourquoi il a été précisé comme ça, je pense qu'il a quelque chose à voir avec la fonction IDE-vieillesse que VB a eu aussi longtemps que je me souvienne: Outils + Options, éditeur de texte, de base, VB spécifique, Afficher les séparateurs de ligne de procédure. C'est juste une supposition, probablement pas une très bonne.


Mise à jour:. Maintenant pris en charge par Roslyn, inclus d'abord avec VS2015

Une autre méthode alternative simple:

Ce que vous pouvez faire est de sélectionner essentiellement le code que vous voulez ajouter le #Region #End Region et fondamentalement cliquez sur:

Ctrl + M , Ctrl + H

Cette enveloppe essentiellement le code. Et puis le rendre encore plus propre et facile de vous trouver pouvez commenter le code. Le résultat final ressemblerait à quelque chose comme ceci:

entrer image description ici

Je ne sais pas VB, mais en C # ce qui a été autorisé depuis la version 1.0 pour autant que je suis au courant.

En effet, vous pouvez même mettre des régions de code dans des endroits bizarres qui scopes croix. Par exemple:

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

Ici la région commence dans l'instruction if, mais extrémités à l'extérieur. Horrible, mais le compilateur est très bien avec elle.

Que voulez-vous dire quand vous avez dit l'IDE n'a pas « laissé » vous mettez le code dans les régions? Avez-vous eu une erreur de compilation?

Ce fut tout simplement un choix de l'équipe VB fait lors de l'ajout des régions disposent dans la version 7 du langage Visual Basic. Il a été considéré comme une caractéristique qui a été utile pour l'organisation à un niveau de déclaration et non à l'intérieur d'une méthode et donc n'a été autorisé à ce niveau.

L'équipe C # ressenti différemment sur cette fonctionnalité et permet dans de nombreux autres endroits. Je l'ai toujours trouvé surprenant que les directives C # de #region peuvent se produire dans des contextes différents de déclaration.

#region Foo
class Bar {
#endregion

}

Le code équivalent est interdit dans VB.

Pour ceux qui cherchent la plus récente réponse à cette question, il est maintenant possible en VB.NET (à partir de Version 14 sur).

  

Région de directives à l'intérieur organes Méthode

     

Vous pouvez mettre # Région ... # End Région delimiters partout dans un fichier, fonctions à l'intérieur, et couvrant même à travers les corps de la fonction.

L'exemple de l'OP est maintenant parfaitement légal syntaxe:

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

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

Visual Studio 2003 les avait pour VB.NET, mais fonctionnalité a été supprimée dans Visual Studio 2005 et plus tard. Vraiment ennuyeux quand refactoring grandes procédures, mais vous pouvez diviser la fenêtre de code.

Honnêtement, je souhaite C # limiterait l'utilisation de la région parce qu'ils sont trop utilisés. J'ai une macro qui les bandes hors de tous les fichiers de code lorsque héritant des projets C #.

Une autre caractéristique est supprimée de la liste des méthodes Overridable dans le Barre de navigation . Je vérifie pour voir si elles réinsérés dans cette fonction pour chaque nouvelle version de Visual Studio depuis 2005.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top