我真的很欣赏在代码中定义区域的可能性,因为它极大地提高了可读性。
无论如何,我想让每个人在所有类中使用相同的约定(所有区域的预定义顺序),例如:
- 私有字段
- 构造函数
- 类属性
- 事件处理程序
- ETC...
您有什么建议吗?这种划分会是什么样子(哪些区域有意义,它们应该有什么名称)以及它们应该以什么顺序定义?
我真的很欣赏在代码中定义区域的可能性,因为它极大地提高了可读性。
无论如何,我想让每个人在所有类中使用相同的约定(所有区域的预定义顺序),例如:
您有什么建议吗?这种划分会是什么样子(哪些区域有意义,它们应该有什么名称)以及它们应该以什么顺序定义?
我的约定是不使用它们。
如果您发现您的班级太大以至于您需要通过区域隐藏大部分班级,我建议您的班级太复杂并且应该分开。
有人曾经说过,有一个像上面这样的约定:
- 私有字段
- 构造函数
- 类属性
- 事件处理程序
- ETC...
就像摆一张桌子,所有的盘子都在一起,所有的勺子都在一起,所有的刀子都在一起,所有的叉子都在一起。
我对这个#region
问题的看法是将相关的方法、事件定义和属性放在一个区域中。但是,完全必须这样做会表明代码有异味(您的类太大或做的事情太多),但这是将其重构为更好的类的良好第一步。
每当我看到区域时,我认为代码要么已生成,要么需要重构。
避免使用它们,当你觉得需要它们时,重新检查你在做什么,并尝试将你的班级分成更小的班级。最终,这将比使用区域更有助于提高应用程序的可读性。
就我个人而言,我不建议将代码区域作为代码约定的一部分。主要原因是区域隐藏代码,这可能会导致以下问题:
如果您有兴趣在您的团队中实施编码风格约定,请查看Microsoft StyleCop。请注意,该工具目前仅适用于 C#。
#region Lotsa boring code and lookup tables
我用它来节省屏幕空间,仅此而已:)
我使用以下区域:
Private Member Variables
Constructor
Public Properties
Private Methods
Public Methods
Events
原因是因为更好的代码组织。
我使用的文件可能有超过 2000 行代码,并且很难在没有区域的情况下维护代码。
我认为地区没有必要。它们不清晰。如果你需要(想想,你真的需要吗?)你的类中的数量代码,你可以使用“部分”类来拆分类逻辑单元。
将它们视为另一种形式的注释:与您的代码混合的附加信息,没有对其进行正式检查。因此,它可能会随着代码而过时。
因此,切勿在代码中已经说明的注释或区域指令中重复。
仅添加额外信息。
特别是,使用区域来重申某些成员是属性、事件等的事实是完全没有意义的。最常见的问题是您为“私有方法”创建了一个区域,然后您编辑其中一个使其公开。现在你必须移动它,这意味着在与旧版本的差异中,简单的变化更难辨别。
您可能对此感兴趣,您是否对 c# region 说不。
我认为只要您在整个项目中保持一致,您编写它们的顺序并不重要。还要非常小心过度使用它们(因此是初始链接!)。
没有什么比找到一个只隐藏一行代码的封闭构造器区域更糟糕的了。
我认为这最终取决于个人口味。正如我所说,一致性是关键!
我为我一直使用的 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>
如您所见,我确实将区域用于、Variables
、Construction/Destruction
和Properties
方法。我经常将另一个子区域添加到名为. 区域的顺序也适用于StyleCop。Public
Private
events