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