对于那些使用 Visual Studio 环境的人来说,您对将任何代码包装在 #regions 中有何看法?(或者如果任何其他 IDE 有类似的东西......)

有帮助吗?

解决方案

十分之九的代码折叠意味着你没有使用 片上系统原理 物有所值。
我对部分课程或多或少也有同样的感觉。如果您认为一段代码太大,您需要将其分成可管理(和可重用)的部分,而不是隐藏或拆分它。
下次有人需要更改它时,它会咬你,并且看不到隐藏在 250 行怪物方法中的逻辑。

只要有可能,就从主类中提取一些代码,并将其放入辅助类或工厂类中。

foreach (var item in Items)
{
    //.. 100 lines of validation and data logic..
}

不如

foreach (var item in Items)
{
    if (ValidatorClass.Validate(item))
        RepositoryClass.Update(item);
}



无论如何,我的 0.02 美元。

其他提示

这是在上讨论过的 编码恐怖.

我个人的信念是它们很有用,但就像任何过量的东西一样,它们也可能太多了。

我用它来将我的代码块排序为:
枚举
声明
构造函数
方法
事件处理程序
特性

有时您可能会发现自己所在的团队鼓励或要求#regions。如果您像我一样并且无法忍受摆弄折叠代码,您可以关闭 C# 的大纲:

  1. 选项 -> 文本编辑器 -> C# -> 高级选项卡
  2. 取消选中“打开文件时进入大纲模式”

我使用#Region来隐藏丑陋且无用的自动生成代码,这些代码确实属于分部类的自动生成部分。但是,当处理旧项目或升级项目时,您并不总是拥有这种奢侈。

至于其他类型的折叠,我一直折叠功能。如果你给函数命名得好,你将永远不需要查看内部,除非你正在测试某些东西或(重新)编写它。

虽然我理解杰夫等人的问题。等人。与地区有什么,我 明白为什么要打 控制键+中号,控制键+L 扩展文件中的所有区域非常困难。

我用 文本伙伴 (仅限 Mac)它具有代码折叠功能,我发现它对于折叠功能非常有用,我知道我的“getGet”功能的作用,我不需要它占用 10 行哦如此宝贵的屏幕空间。

我从不使用它来隐藏 for 循环、if 语句或类似语句,除非将代码显示给其他人,我将隐藏他们看到的代码,以避免两次显示相同的代码。

我更喜欢部分类而不是区域。

其他人对区域的广泛使用也给我这样的印象:某人在某个地方违反了单一职责原则,并试图用一个对象做太多事情。

@汤姆

提供了部分类,以便您可以将工具自动生成的代码与代码生成完成后可能需要进行的任何自定义分开。这意味着您的代码在重新运行 codegen 后保持完整并且不会被覆盖。这是一件好事。

我不喜欢部分类 - 我尝试开发我的类,使每个类都有一个非常清晰的、它负责的单一问题。为此,我认为不应将具有明确职责的内容拆分到多个文件中。这就是为什么我不喜欢部分课程。

话虽如此,我对地区持观望态度。大多数情况下,我不使用它们;然而,我每天都使用包含区域的代码 - 有些人对它们非常重视(将私有方法折叠到一个区域中,然后每个方法折叠到它自己的区域中),而有些人则对它们很轻(折叠枚举,折叠属性等)。到目前为止,我的一般经验法则是,我仅在以下情况下才将代码放在区域中:(a)数据可能保持静态或不会经常被触及(如枚举),或者(b)如果有方法由于子类化或抽象方法实现,它们是出于必要而实现的,但是,同样,不会经常被触及。

决不能在方法内部使用区域。它们可用于对方法进行分组,但必须极其谨慎地处理,以免代码的读者发疯。通过修饰符折叠方法是没有意义的。但有时折叠可能会增加可读性。例如在使用外部库时,将一些用于解决某些问题的方法进行分组,并且您不想经常访问,这可能会有所帮助。但编码人员必须始终寻求解决方案,例如在这个特定示例中使用适当的类包装库。当其他方法都失败时,请使用折叠来提高可读性。

这只是那些毫无结果的愚蠢讨论之一。如果您喜欢区域,请使用它们。如果不这样做,请配置编辑器以将其关闭。在那里,每个人都很高兴。

如果我不必根据语言固有的代码功能手动维护区域分组,那么区域折叠就很好了。例如,编译器已经知道它是一个构造函数。IDE 的代码模型已经知道它是构造函数。但是,如果我想查看构造函数组合在一起的代码视图,出于某种原因,我必须重申这些东西是构造函数的事实,方法是将它们物理地放置在一起,然后在它们周围放置一个组。这同样适用于任何其他分割类/结构/接口的方式。如果我改变主意并希望首先将公共/受保护/私有内容分成几组,然后按成员类型进行分组,该怎么办?

使用区域来标记公共属性(例如)与输入冗余注释一样糟糕,该注释不会对代码本身已经可识别的内容添加任何内容。

不管怎样,为了避免为此目的使用区域,我编写了一个名为 Ora 的免费开源 Visual Studio 2008 IDE 插件。它自动提供分组视图,从而大大减少了维护物理分组或使用区域的必要性。 你可能会发现它很有用.

我通常发现,在处理像 C# 中的事件这样的代码时,大约有 10 行代码实际上只是事件声明的一部分(EventArgs 类、委托声明和事件声明)在它们周围放置一个区域,然后将它们折叠起来的方式使它更具可读性。

我认为如果使用得当,它是一个有用的工具。很多时候我觉得方法和枚举等经常被折叠的东西应该是小黑盒子。除非您出于某种原因必须查看它们,否则它们的内容并不重要,并且应尽可能隐藏。但是,我从不折叠私有方法、注释或内部类。方法和枚举实际上是我唯一折叠的东西。

我的方法与这里的其他方法类似,使用区域将代码块组织为构造函数、属性、事件等。

Roland Weigelt 的博客文章中提供了一组出色的 VS.NET 宏, 对#region 更好的键盘支持...#endregion. 。我已经使用这些多年了,映射 ctrl+。折叠当前区域并按 ctrl++ 展开它。发现它比折叠/展开所有内容的默认 VS.NET 功能要好得多。

我个人一直使用#Regions。我发现它可以帮助我将属性、声明等内容彼此分开。

这可能也是一个很好的答案!

编码恐怖

编辑:该死,帕特打败了我!

我自己更喜欢#regions,但一位老同事无法忍受隐藏东西。当我在一个包含 7 个 #region 的页面上工作时,我理解了他的观点,其中至少有 3 个 #region 是自动生成的并且具有相同的名称,但总的来说,我认为它们是一种有效的方式来分割事物并减少所有内容杂乱。

我确实对使用 #region 组织代码没有任何问题。就我个人而言,我通常会为属性、事件处理程序和公共/私有方法等设置不同的区域。

Eclipse 自己用 Java(或带有插件的 PHP)完成了一些工作。允许您折叠功能等。我倾向于喜欢它。如果我知道某个函数的作用并且我没有在处理它,那么我就不需要查看它。

Emacs 有一个折叠小模式,但我只是偶尔启动它。大多数时候,当我正在研究从另一位物理学家那里继承的一些怪物时,他/她显然没有接受过多少指导,或者不太关心他/她的编码实践。

使用区域(或其他折叠代码) 应该 与代码气味(或隐藏它们)或任何其他隐藏您不希望人们“轻易”看到的代码的想法无关。

区域和代码折叠实际上是为了提供一种方法来轻松地对可以折叠/折叠/隐藏的代码部分进行分组,以最大程度地减少当前正在处理的内容周围的无关“噪音”。如果你设置正确(意味着实际上为你的区域命名一些有用的东西,比如包含的方法的名称),那么你可以折叠除当前正在编辑的函数之外的所有内容,并且仍然保持一定程度的上下文,而不必实际看到其他函数代码行。

围绕这些想法可能应该有一些最佳实践类型指南,但我广泛使用区域来为我的代码文件提供标准结构(我对事件、类范围字段、私有属性/方法、公共属性/方法进行分组)。每个方法或属性还有一个区域,其中区域名称是方法/属性名称。如果我有一堆重载方法,则区域名称是完整签名,然后整个组都包装在一个仅是函数名称的区域中。

我个人讨厌地区。在我看来,唯一应该位于区域中的代码是生成的代码。当我打开文件时,我总是以 Ctrl+M+O 开头。这会折叠到方法级别。当您有区域时,您只能看到区域名称。

在签入之前,我对方法/字段进行逻辑分组,以便在 Ctrl+M+O 之后看起来没问题。如果你需要区域,你的班级里就得排很多队。我也发现这种情况很常见。

区域 ThisLooksLikeWellOrganizedCodeBecauseIUseRegions

// 完全是垃圾,这里没有结构

端区

枚举

特性

.ctors

方法

事件处理程序

这就是我使用区域的全部目的。我不知道你可以在方法内部使用它们。

听起来是个糟糕的主意:)

编码恐怖 文章实际上也让我思考了这个问题。

一般来说,在大型类中,我会在成员变量、常量和属性周围放置一个区域,以减少必须滚动的文本量,并将其他所有内容保留在区域之外。在表单上,​​我通常将内容分为“成员变量、常量和属性”、表单函数和事件处理程序。再说一遍,当我只想查看一些事件处理程序时,我不必滚动大量文本。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top