是否有标准的方式来布置C#文件?如在,Fields,然后是Properties,然后是Constructors等?
这是我通常做的,但我想知道是否有标准方式?
人们将他们的字段组合在一起,还是将他们放在属性中?或者人们不担心订单? Visual Studio似乎让它变得如此困难。
修改:在此处移动了有关ReSharper的其他部分:Make Resharper respect your preference for code order.
答案 0 :(得分:54)
我倾向于使用Microsoft StyleCop,其根据规则SA1201具有设定顺序:
原因 C#代码中的元素 文件与...有关 代码中的其他元素。
规则说明违反此规定 规则发生在代码元素时 在文件中不遵循标准 订购方案。
遵守这条规则,要素在 文件根级别或在 命名空间必须位于 以下顺序:
- 外部别名指令
- 使用指令
- 命名空间
- 代表
- 枚举
- 接口
- 的Structs
- 类
在类,结构或接口中, 元素必须放在 以下顺序:
- 字段
- 构造
- 终结者(破坏者)
- 代表
- 活动
- 枚举
- 接口
- 属性
- 索引器
- 方法
- 的Structs
- 类
遵守标准订购 基于元素类型的方案可以 增加可读性和 文件的可维护性和 鼓励代码重用。
实现接口时,它是 有时希望将所有人分组 接口的成员旁边的一个 另一个。这有时需要 违反此规则,如果接口 包含不同类型的元素。 这个问题可以通过以下方法解决 使用部分类。
如果该类尚未添加,则将部分属性添加到类中 部分。
添加具有相同名称的第二个分部类。可以放置 这个在同一个文件中,就在下面 原始课程,或在一秒钟内 文件
- 醇>
移动接口继承和接口的所有成员 实施到第二部分 上课。
答案 1 :(得分:9)
我认为没有最好的方式。布局时需要考虑两个重要的事项。第一个最重要的是一致性。选择一种方法并确保整个团队同意并应用布局。其次,如果你的课程变得足够大,你正在寻找那些讨厌的属性所在的地方(或者必须实现区域以使它们更容易找到),那么你的课程可能太大了。考虑嗅探它,并根据你的味道进行重构。
要回答转化器问题,请在选项(位于 C#节点下)的键入成员布局下进行检查。这并不简单,但可以更改布局顺序。
答案 2 :(得分:2)
答案 3 :(得分:1)
我倾向于聚集私人数据,并倾向于在功能组中聚集相关的方法/属性。
public class Whatever {
// private data here
int _someVal = kSomeConstant;
// constructor(s)
public Whatever() { }
#region FabulousTrick // sometimes regionize it
// fabulous trick code
private int SupportMethodOne() { }
private double SupportMethodTwo() { }
public void PerformFabulousTrick(Dog spot) {
int herrings = SupportMethodOne();
double pieces = SupportMethodTwo();
// etc
}
#endregion FabulousTrick
// etc
}
答案 4 :(得分:1)
您可以尝试使用Regionerate来帮助解决此问题。我非常喜欢它,这是Scott Hanselman的选择。
答案 5 :(得分:1)
如上所述,我认为没有最好的方式。但有些组织确实帮助了程序员。
在漫长的项目中,您经常花一些时间来查找一个或多个源文件,试图找到您的某个功能。
所以我以这种方式大量使用#region
-
region事件:此类使用的所有事件引用(至少在此特定的分部类中)。
区域控件:与表单上的控件直接交互的所有函数。
区域MDI :将mdi设置为
然后会有一些功能而不是界面,
区域正则表达式搜索
我随着时间的推移做了一些补充,但是我总是使用相同的模式。我必须说一些程序员在接受我的工作后会告诉我这很容易理解,而其他程序员则很麻烦。
你可以一半的时间和一半的四分之一的时间取悦一半的人,而另一半的时间你会让包括你自己在内的所有人感到困惑。我认为Winston Chrchil说过。
答案 6 :(得分:0)
无论是什么让你更有成效。有些像属性访问器旁边的私有字段,有些像构造函数上方的字段一样。可以帮助的最重要的事情是分组“喜欢”元素。我个人喜欢将私人方法,私人财产等整合在一起。
不断尝试一些事情,无论你感觉如何,都会提高你的工作效率并帮助你保持代码的维护。
答案 7 :(得分:0)
每个都是他们自己的,但我倾向于遵循MSDN帮助遵循的相同顺序。
我也不喜欢嵌套类或枚举,而是为它们创建单独的文件,这也使编写单元测试更容易(因为当您需要添加/修复/重构测试时,很容易找到关联的测试文件)。
恕我直言,订单并不重要,因为VS可以很容易地找到所有成员(特别是如果你按照一个类/接口/枚举每个文件的方法),如果你想构建文档,Sandcastle会将它们分组,所以我更关心给他们有意义的名字。
答案 8 :(得分:0)
除了在类文件中保持一致的区域集之外,我还按字母顺序保留区域的所有组件。在阅读代码时,我倾向于有一些“视觉记忆”,这让我疯狂地不得不使用导航下拉列表在文件中查找代码,因为它遍布整个地方。
答案 9 :(得分:0)
我使用以下布局:
事件 全局/类范围的字段 私人/内部 性能 方法 公共/保护 性能 方法 嵌套类(尽管我尽可能避免使用这些类)
我还坚信每个文件有一个代码“thing”(类,接口或枚举),文件名与“thing”名称相同。是的,它创造了一个更大的项目,但它使得查找事物变得更加容易。