任何.NET'#region指令'约定的想法?

时间:2010-04-06 08:10:25

标签: c# .net naming-conventions region regions

我非常感谢您可以在代码中定义区域,因为它可以疯狂地提高可读性。

无论如何,我想让所有人在所有类别中使用相同的约定(使用所有区域的预定义顺序),如:

  • 私人领域
  • 构造
  • 类属性
  • 事件处理程序
  • 等...

你有什么命题可以看出这个区域是什么样的(哪些区域有意义,哪些区域应该有它们)以及它们应该以何种顺序定义?

10 个答案:

答案 0 :(得分:37)

我的约定不是使用它们。

如果你发现你的班级太大,你需要通过地区隐藏它的大部分,我建议你的班级太复杂,应该分开。

答案 1 :(得分:11)

有人曾经说过像上面那样的公约:

  
      
  • 私人领域
  •   
  • 构造
  •   
  • 类属性
  •   
  • 事件处理程序
  •   
  • 等...
  •   

就像设置一张桌子,所有的盘子在一起,所有的勺子在一起,所有的刀子都在一起,所有的叉子都在一起。

我对#region问题的看法是将相关方法,事件定义和属性放在一个区域中。然而,完全不必这样做会表明代码气味(你的课程太大或太多东西)但这是将它重构为更好的课程的良好的第一步。

答案 2 :(得分:6)

每当我看到区域时,我认为代码是生成的或需要重新分解。

避免使用它们,当你觉得需要它们时,重新检查你正在做的事情并尝试将你的课程分成较小的课程。最终,这将有助于提高应用程序的可读性,而不是使用区域。

答案 3 :(得分:6)

我个人不建议将代码区域作为代码约定的一部分。主要原因是地区隐藏代码,这可能会导致以下问题:

  • 开发人员可能会错过一些重要的内容 部分源代码
  • 平均值 同一文件中的LOC数量趋于增加

如果您有兴趣在团队中执行编码风格约定,请查看Microsoft StyleCop。请注意,该工具目前仅适用于C#。

答案 4 :(得分:3)

#region Lotsa boring code and lookup tables

我用它来节省屏幕空间,没有别的:)

答案 5 :(得分:3)

我使用以下区域:

Private Member Variables
Constructor
Public Properties
Private Methods
Public Methods
Events

原因在于更好地组织代码 我使用可能有超过2000行代码的文件,并且很难在没有区域的情况下维护代码。

答案 6 :(得分:3)

我认为地区没有必要。它们不清晰。 如果你需要(想想,你真的需要?)你班级的金额代码,你可以使用'partial'类来分割类逻辑单元。

答案 7 :(得分:2)

将它们视为另一种形式的评论:与您的代码混合的其他信息,其中未对其执行正式检查。因此,它可能会随着代码而过时。

所以不要在代码中已经说明的注释或区域指令中复制。

仅添加额外信息。

特别是,使用区域来重申某些成员是属性,事件等这一事实是完全没有意义的。最常见的问题是您为“私有方法”创建了一个区域,然后编辑其中一个区域以使其公开。现在你必须移动它,这意味着在旧版本的差异中,简单的更改很难辨别。

答案 8 :(得分:1)

您可能对此 do you say no to c# regions 感兴趣。

我认为,只要你在整个项目中保持一致,你编写它们的顺序并不重要。也要非常警惕过度使用它们(因此最初的链接!)。

没有什么比找到一个只隐藏一行代码的封闭构造函数区域更糟糕了。

我认为最终归结为个人品味。正如我所说,一致性是关键!

答案 9 :(得分:1)

我为VS 2008编写了自己的区域代码片段,我总是使用它:

<?xml version="1.0" encoding="utf-8" ?>
<CodeSnippets  xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
<CodeSnippet Format="1.0.0">
    <Header>
        <Title>#class region</Title>
        <Shortcut>#classregion</Shortcut>
        <Description>Code snippet for #region in classes</Description>
        <Author>Simon Linder</Author>
        <SnippetTypes>
            <SnippetType>Expansion</SnippetType>
            <SnippetType>SurroundsWith</SnippetType>
        </SnippetTypes>
    </Header>
    <Snippet>
        <Declarations>
            <Literal>
                <ID>name</ID>
                <ToolTip>Region name</ToolTip>
                <Default>MyRegion</Default>
            </Literal>
        </Declarations>
        <Code Language="csharp">
            <![CDATA[#region Variables
                    $selected$ $end$
                #endregion

            #region Construction/Destruction
                    $selected$ $end$
                #endregion

            #region Properties
                    $selected$ $end$
                #endregion

            #region Public Methods 
                    $selected$ $end$
                #endregion

            #region Private/Proteced Methods
                    $selected$ $end$
                #endregion]]>
        </Code>
    </Snippet>
</CodeSnippet>

正如您所看到的,我确实使用了VariablesConstruction/DestructionPropertiesPublicPrivate方法的区域。我经常将另一个子区域添加到名为events的私有区域中。区域的顺序也适用于StyleCop