“Microsoft 扩展的设计准则规则”代码分析规则集
“Microsoft 扩展的设计准则规则”规则集扩展了基本设计准则规则,以尽可能多地报告可用性和可维护性问题。 其中尤其侧重于命名准则。 如果项目包括库代码或者如果要实施最高标准以编写易于维护的代码,则应考虑加入此规则集。
“扩展的设计准则规则”包括“Microsoft 基本设计准则规则”中的所有规则。 “基本设计准则规则”包括“Microsoft 最少量建议规则”中的所有规则。 有关更多信息,请参见 “Microsoft 基本设计准则规则”代码分析规则集和 “Microsoft 最少量建议规则”代码分析规则集
下表介绍了“Microsoft 扩展的设计准则规则”规则集中的所有规则。
规则 |
说明 |
---|---|
请确保每个命名空间都有一个逻辑组织,并确保将类型放入稀疏填充的命名空间的理由是有效的。 |
|
通过引用(使用 out 或 ref)传递类型要求具有使用指针的经验,了解值类型和引用类型的不同之处,以及能处理具有多个返回值的方法。 另外,out 和 ref 参数之间的差异没有得到广泛了解。 |
|
接口定义提供某个行为或使用协定的成员。 接口所描述的功能可以被任何类型采用,无论该类型显示于继承层次结构中的哪一位置。 类型通过实现接口的成员来实现接口。 空接口无法定义任何成员;因此,它无法定义可以实现的协定。 |
|
通过引用(使用 out 或 ref)传递类型要求具有使用指针的经验,了解值类型和引用类型的不同之处,以及能处理具有多个返回值的方法。 为一般用户进行设计的库架构师不应指望用户能熟练运用 out 或 ref 参数。 |
|
对于传递给外部可见方法的所有引用参数,都应检查其是否为 null。 |
|
类型在继承层次结构中的深度超过四级。 深度嵌套的类型层次结构可能很难遵循、理解和维护。 |
|
实例字段的名称以“s_”开头,或者 static(在 Visual Basic 中为 Shared)字段的名称以“m_”开头。 |
|
类型或方法具有较低的可维护性索引值。 如果可维护性指数较低,则表示类型或方法可能难以维护,最好重新进行设计。 |
|
此规则通过计算类型或方法包含的唯一类型引用的个数来衡量类耦合。 |
|
该规则假定当前不使用名称中包含“reserved”的枚举成员,而是将其作为一个占位符,以在将来的版本中重命名或移除它。 重命名或移除成员是一项重大更改。 |
|
资源字符串中的每个单词根据大小写被拆分为标记。 Microsoft 拼写检查器库会对由两个连续的标记构成的每个组合进行检查。 如果被识别,该单词将生成规则冲突。 |
|
标识符的名称包含多个单词,其中至少有一个单词似乎是大小写不正确的组合词。 |
|
资源字符串包含一个或多个未被 Microsoft 拼写检查器库识别的单词。 |
|
外部可见标识符的名称中包含一个或多个未被 Microsoft 拼写检查器库识别的单词。 |
|
按照约定,标识符名称不包含下划线 (_) 字符。 该规则将检查命名空间、类型、成员和参数。 |
|
按照约定,参数名使用 Camel 大小写,命名空间、类型和成员名称使用 Pascal 大小写。 |
|
按照约定,扩展某些基类型或实现某些接口的类型的名称,或者由这些类型派生的类型的名称应具有与相应基类型或接口关联的后缀。 |
|
按照约定,只有扩展某些基类型或实现某些接口的类型的名称或者从这些类型派生的类型的名称,应该以特定的保留后缀结尾。 其他类型名称不应使用这些保留的后缀。 |
|
枚举成员的名称不能以类型名称作为前缀,因为类型信息将由开发工具提供。 |
|
事件的名称以“Before”或“After”开头。 若要命名按特定顺序引发的相关事件,请使用现在时或过去时指示一系列操作中的相对位置。 |
|
公共枚举具有 System.FlagsAttribute 特性并且其名称不是以“s”结尾。 标有 FlagsAttribute 的类型具有复数形式的名称,因为该特性指明可以指定多个值。 |
|
外部可见的接口的名称不以大写的“I”开头。 外部可见的类型或方法上的泛型类型参数的名称不以大写的“T”开头。 |
|
命名约定规定,复数形式的枚举名称表示可以同时指定多个枚举值。 |
|
参数名称应传达参数的含义,成员名称应传达成员的含义。 两者相同的设计非常少见。 使参数与其成员同名会导致不直观的效果,会使库难以使用。 |
|
外部可见成员中的某个参数的名称包含一个数据类型名称,或者外部可见成员的名称包含一个语言特定的数据类型名称。 |
|
公共或受保护成员的名称以“Get”开头,且其余部分与公共或受保护属性的名称匹配。" “Get”方法和属性的名称应当能够明确表示其功能。 |
|
按照约定,只有某些编程元素具有以特定前缀开头的名称。 |
|
类型名称不应该与 .NET Framework 类库中定义的命名空间的名称匹配。 与该规则冲突将使库的可用性下降。 |
|
以一致的方式命名重写层次结构中的参数可以提高方法重写的可用性。 如果派生方法中的参数名与基声明中的名称不同,可能会导致无法区分出该方法是基方法的重写还是该方法的新重载。 |
|
在外部可见的标识符的名称中,包括一个存在首选备用词条的词条。 或者,名称中包含“Flag”或“Flags”一词。 |
|
方法体中的文本字符串包含一个或多个未被 Microsoft 拼写检查器库识别的单词。 |