在类结构方面,是否有一个官方的c#项目顺序指南?
它是这样的:
公共字段 私有字段 属性 构造函数 方法 ?
我很好奇物品的摆放顺序是否有硬性规定?我有点到处都是。我想坚持一个特定的标准,这样我就可以在任何地方使用它。
真正的问题是我的更复杂的属性最终看起来很像方法,它们在构造函数之前的顶部感觉不合适。
任何建议/建议吗?
在类结构方面,是否有一个官方的c#项目顺序指南?
它是这样的:
公共字段 私有字段 属性 构造函数 方法 ?
我很好奇物品的摆放顺序是否有硬性规定?我有点到处都是。我想坚持一个特定的标准,这样我就可以在任何地方使用它。
真正的问题是我的更复杂的属性最终看起来很像方法,它们在构造函数之前的顶部感觉不合适。
任何建议/建议吗?
当前回答
根据StyleCop规则文档,排序如下。
在类、结构或接口中:(SA1201和SA1203)
常数字段 字段 构造函数 终结器(析构函数) 代表 事件 枚举 接口(接口实现) 属性 索引器 方法 结构体 类
在这些组中,按访问顺序排序:(SA1202)
公共 内部 保护内部 受保护的 私人
在每个访问组中,依次按静态、非静态排序:(SA1204)
静态 非静态
在每个静态/非静态字段组中,按只读、非只读顺序排列:(SA1214和SA1215)
只读的 non-readonly
展开的列表有130行长,所以这里就不展开了。展开的方法部分为:
公共静态方法 公共方法 内部静态方法 内部方法 受保护的内部静态方法 受保护的内部方法 受保护的静态方法 受保护的方法 私有静态方法 私有方法
文档指出,如果规定的顺序不合适——比如,正在实现多个接口,并且接口方法和属性应该分组在一起——那么使用分部类将相关的方法和属性分组在一起。
其他回答
正如前面提到的,c#语言中没有规定布局的东西,我个人使用区域,我对一个普通类也这样做。
public class myClass
{
#region Private Members
#endregion
#region Public Properties
#endregion
#region Constructors
#endregion
#region Public Methods
#endregion
}
反正对我来说是有道理的
我的偏好是按种类排序,然后减少能见度如下
public methods
public events
public properties
protected methods
protected events
protected properties
private methods
private events
private properties
private fields
public delegates
public interfaces
public classes
public structs
protected delegates
protected interfaces
protected classes
protected structs
private delegates
private interfaces
private classes
private structs
我知道这违反了Style Cop,如果有人能给我一个很好的理由,为什么我应该把一个类型的实现细节放在它的接口之前,我愿意改变。目前,我强烈倾向于把私人成员放在最后。
注意:我不使用公共字段或受保护字段。
不是按可见性或按项目类型(字段、属性、方法等)分组,而是按功能分组呢?
我更喜欢将私有字段与构造函数一起放在顶部,然后将公共接口位放在后面,然后是私有接口位。
此外,如果您的类定义足够长,以至于项的顺序变得很重要,这可能是一种代码气味,表明您的类太庞大和复杂,您应该重构。
这是一个古老但仍然非常相关的问题,所以我要补充一点:当您打开一个以前可能读过也可能没有读过的类文件时,您首先要查找的是什么?字段?属性呢?我从经验中意识到,我几乎总是去寻找构造函数,因为最基本的事情是理解这个对象是如何构造的。
因此,我开始在类文件中把构造函数放在前面,结果在心理上是非常积极的。将构造函数放在一堆其他东西后面的标准建议让人感觉不协调。
c# 6中即将出现的主构造函数特性提供了证据,证明构造函数的自然位置是在类的顶部——事实上,主构造函数甚至在开大括号之前就被指定了。
有趣的是,这样的重新排序会产生多大的不同。这让我想起了using语句过去是如何排序的——首先是System名称空间。Visual Studio的“Organize Usings”命令使用了这个顺序。现在使用只是按字母顺序排序,没有对系统名称空间进行特殊处理。结果就是感觉更简单、更干净。