是否有一种标准方法来组织类中的方法?

时间:2010-01-28 16:35:32

标签: c# coding-style

在课堂上组织方法似乎有很多种不同的方法。我可以通过访问对方法进行分组,并按字母顺序排序。我可以将相关方法组合在一起。我可以使用两者的混合,或完全不同的东西。有没有一种标准的方法来解决这个问题?如果没有,你怎么接近它?

12 个答案:

答案 0 :(得分:45)

StyleCop强制执行以下操作:

  

在类,结构或接口中,元素必须按以下顺序放置:

     
      
  • 字段
  •   
  • 构造
  •   
  • 终结者(破坏者)
  •   
  • 代表
  •   
  • 活动
  •   
  • 枚举
  •   
  • 接口
  •   
  • 属性
  •   
  • 索引器
  •   
  • 方法
  •   
  • 的Structs
  •   
  •   

此外,元素按访问顺序排列:

  
      
  • public
  •   
  • internal
  •   
  • protected internal
  •   
  • protected
  •   
  • private
  •   

以及其他一些规则:

  • 包含必须出现在字段
  • 之前
  • static个元素必须出现在实例元素之前。

这可能是一个很好的基线。至于其他订购规则,我通常将相关方法组合在一起。

答案 1 :(得分:7)

无论你做什么,都要把它放在你的标准中并保持一致。我们使用自定义Regionerate配置来订购我们的方法。团队中的每个人都使用相同的配置。

编辑:我们现在正在使用ReSharperCode Cleanup自定义类型成员布局。

答案 2 :(得分:5)

我使用NArrange来完成我想要的大部分事情:组字段,方法......按字母顺序和按访问修饰符。它还强制执行一些样式警察规则(例如,元素类型的顺序,使用语句的位置)。 NArrange在某种程度上是可配置的,如果你不喜欢它,你不必使用默认配置。

更新:现在我使用Resharper,因为NArrange无法正常使用更新的C#语法。

答案 3 :(得分:3)

我没有通过访问修饰符对它们进行排序,也不按字母顺序排序。 (我认为当你在该类中添加或重命名方法时,这是一个相当大的负担......)。

如有必要,我会按功能对它们进行分组。我的意思是:我把相关的方法放在一起。

但是,如果您遵循SRP(Single Responsability Principle),那么我认为排序方法在大多数情况下都是非问题;因为,当你遵循SRP时,你的课程将没有太多的方法。

答案 4 :(得分:1)

我按功能对方法进行分组,从最通用到最具体,区域内的所有内容,所以我可以隐藏不必要的细节。

答案 5 :(得分:1)

由于Visual Studio具有按名称快速导航到方法的工具,因此我更喜欢将私有成员变量和构造函数按功能放在顶部和组方法附近(即,辅助方法靠近调用它们的方法)。我还将属性组合在一起。如果一个类变得充实,我会使用#region指令来显示组织。

答案 6 :(得分:1)

在阅读其他人的源代码时,我倾向于发现相关方法的分组比某些任意伪顺序(如字母顺序)更有用。

虽然本书是专门针对Java的,但Uncle Bob的清洁代码包含一些关于OO类可读性的优秀通用原则。特别是,他使用了一篇写得很好的报纸文章的比喻,标题在顶部,然后是一个概要段落,然后在你阅读文章后面增加细节。通过在课程中瞄准类似的自上而下的结构,它使得阅读或理解代码的任务变得更加容易。

答案 7 :(得分:1)

I group my methods by their access modifier 
and in the following sequence:

  • public
  • internal
  • protected internal
  • protected
  • private

答案 8 :(得分:0)

不,大多数人只是按逻辑相似性对方法进行分组,或者根本没有。它并不重要 - 类不应该大,并且使用一个不错的IDE,您只需按住ctrl + click即可转到任何方法定义。

答案 9 :(得分:0)

我建议首先通过接口进行分组,然后通过一个很好的评论来说明接口名称 - 因为这些不明显。

然后,按关系,然后按字母顺序排序。

使用大量空行来减少读者的认知负担。

答案 10 :(得分:0)

Microsoft的StyleCop工具在定义类中的元素顺序方面做得很好。您还可以编写工具扩展以符合您公司的编码标准。话虽这么说,StyleCop是一个很好的起点。

答案 11 :(得分:0)

我不确定是否有一致的标准方式......但我将相关方法组合在一起,也许是按访问者进行分组。这使得在赛道后期找到相关内容变得最简单。