托管代码的“扩展的设计准则规则”规则集
“Microsoft 扩展的设计准则规则”规则集扩展了基本设计准则规则,以尽可能多地报告可用性和可维护性问题。其中尤其侧重于命名准则。如果项目包括库代码或者如果要实施最高标准以编写易于维护的代码,则应考虑加入此规则集。
“扩展的设计准则规则”包括“Microsoft 基本设计准则规则”中的所有规则。“基本设计准则规则”包括“Microsoft 最少量建议规则”中的所有规则。有关详细信息,请参见托管代码的“基本设计准则规则”规则集和托管代码的“托管建议规则”规则集
下表介绍了“Microsoft 扩展的设计准则规则”规则集中的所有规则。
规则 |
说明 |
---|---|
那自己可支配领域类型应该是一次性的 |
|
正确声明事件处理程序 |
|
用AssemblyVersionAttribute标记组件 |
|
接口方法能由子类可调用 |
|
拥有本机资源的类型应该是一次性的 |
|
移动P/Invokes 到 NativeMethods类 |
|
不要隐藏基类方法 |
|
正确实现IDisposable |
|
不提高在意外的位置异常 |
|
避免重复加速器 |
|
P / Invoke入口点应该存在 |
|
P/Invokes应该是不可见 |
|
自动布局类型不应该是COM可见 |
|
P / Invoke后立即调用GetLastError |
|
COM可见类型的基类型应该是COM可见 |
|
COM注册方法应该匹配 |
|
正确声明P/Invokes |
|
移除空的终结 |
|
值类型字段应该是便携的 |
|
P/Invoke 声明应为可移植声明 |
|
不要锁定具有弱标识的对象 |
|
检查SQL查询的安全漏洞 |
|
指定封送处理的P / Invoke字符串参数 |
|
审查的声明性安全上的值类型 |
|
指针应该是不可见 |
|
有保证的类型不应公开栏 |
|
方法的安全性应该是类型的一个超集 |
|
APTCA方法应该只调用APTCA方法 |
|
APTCA类型应该只延长APTCA基本类型 |
|
不要使用链接请求间接公开方法 |
|
重写的链接请求应与基相同 |
|
裹在外层的try脆弱的finally子句 |
|
类型链接请求需要继承要求 |
|
安全关键类型可能不参与类型等价 |
|
默认构造函数必须至少与基类型默认构造函数一样关键 |
|
委托必须绑定到具有一致透明度的方法 |
|
重写基方法时,方法必须保持一致的透明度 |
|
透明方法必须只包含可验证的IL |
|
透明方法不得调用与SuppressUnmanagedCodeSecurity属性的方法 |
|
透明代码不得引用安全关键项 |
|
透明方法不得满足LinkDemands |
|
类型必须至少与其基类型和接口一样关键 |
|
透明方法不得使用安全断言 |
|
透明方法不能调用本地代码 |
|
重新抛出保存堆栈的详细信息 |
|
不要多次释放对象 |
|
以内联方式初始化值类型的静态字段 |
|
不要使用 WebMethod 标记服务组件 |
|
应释放可释放的字段 |
|
不要调用构造函数重写的方法 |
|
可释放类型应声明终结器 |
|
终结器应调用基类的终结器 |
|
实现序列化构造函数 |
|
重写 ValueType.Equals 时应重载相等运算符 |
|
使用 STAThread 标记 Windows 窗体的入口点 |
|
标记所有不可序列化的字段 |
|
对 ISerializable 的类调用基类方法 |
|
以 SerializableAttribute 标记 ISerializable 类型 |
|
正确实现序列化方法 |
|
正确实现 ISerializable |
|
为格式化方法提供正确的参数 |
|
正确测试NaN |
|
不要在泛型类型中使用静态成员 |
|
不要公开泛型列表 |
|
使用泛型事件处理程序实例 |
|
泛型方法应提供类型参数 |
|
避免泛型类型的参数过多 |
|
不要将泛型类型嵌套在成员签名 |
|
使用泛型(如适用) |
|
枚举应该具有0值 |
|
集合应实现泛型接口 |
|
考虑通过基类型作为参数 |
|
抽象类型应该不具有构造函数 |
|
重载加法方法和减法方法时重载相等运算符 |
|
集用CLSCompliantAttribute标记程序集 |
|
与请将ComVisibleAttribute标记程序集 |
|
用 AttributeUsageAttribute 标记特性 |
|
定义访问器的属性参数 |
|
索引不应该是多维的 |
|
使用属性(如适用) |
|
代替重复的参数与参数数组 |
|
默认参数不应该被用 |
|
使用FlagsAttribute标记枚举 |
|
枚举应该是Int32类型 |
|
使用事件(如适用) |
|
没有捕获一般的异常类型 |
|
实施标准异常构造 |
|
嵌套类型不应该是可见的 |
|
ICollection实现含有强类型成员 |
|
可比较类型重写方法 |
|
枚举器应该是强类型 |
|
列表是强类型 |
|
提供ObsoleteAttribute消息 |
|
将整型或字符串参数用于索引器 |
|
属性不应是只写的 |
|
不要对引用类型重载相等运算符 |
|
不要在密封类型中声明受保护的成员 |
|
不要在密封类型声明虚拟成员 |
|
声明中的命名空间的类型 |
|
不要声明可见实例字段 |
|
静态成员的类型应密封 |
|
静态容器类型不应具有构造函数 |
|
URI参数不应为字符串 |
|
URI返回值不应是字符串 |
|
URI属性不应是字符串 |
|
字符串的URI重载调用的System.Uri重载 |
|
类型不应扩展某些基类型 |
|
成员不应公开某些具体类型 |
|
异常应该是公共的 |
|
变量名不应与字段名匹配 |
|
避免过度复杂 |
|
标识符应超过大小写不同 |
|
标识符不应该匹配的关键字 |
|
审查未使用的参数 |
|
删除未使用的当地人 |
|
避免过多的当本地 |
|
初始化引用类型的静态字段 |
|
避免使用未调用的私有代码 |
|
避免未实例内部类 |
|
避免未密封的属性 |
|
在多维交错数组更好 |
|
重写equals和操作员的值类型等于 |
|
属性不应返回数组 |
|
测试使用字符串长度的空字符串 |
|
将成员标记为 static |
|
避免未使用的私有字段 |
|
不要引发保留的异常类型 |
|
Win32 API的使用管理等同 |
|
正确的实例化参数异常 |
|
非常数区域应该是不可见 |
|
不要使用FlagsAttribute标记枚举 |
|
在异常子句中不引发异常 |
|
终结应受到保护 |
|
不要降低继承成员的可见性 |
|
成员应该超过返回类型不同 |
|
重写equals超载运算符等号 |
|
运算符重载具有命名的备用 |
|
运算符应有对称重载 |
|
集合属性应该是只读 |
|
使用PARAMS的可变参数 |
|
传递System.Uri对象,而不是字符串 |
|
提供反序列化方法可选字段 |
|
避免用几个类型命名空间 |
|
避免out参数 |
|
避免空接口 |
|
不要通过引用传递类型 |
|
验证的公共方法的参数 |
|
避免过度继承 |
|
查看误导字段名 |
|
避免使用难以维护的代码 |
|
避免过度类耦合 |
|
不命名枚举值'保留' |
|
资源字符串复合词应该正确大小写 |
|
复合词应该正确大小写 |
|
资源字符串应该正确的拼写 |
|
标识符应正确拼写 |
|
标识符不应包含下划线 |
|
标识符应正确大小写 |
|
标识符应具有正确的后缀 |
|
标识符不应该有不正确的后缀 |
|
不要用类型名称前缀的枚举值 |
|
事件不应之前或之后有前缀 |
|
标志枚举应该使用复数名称 |
|
标识符应具有正确的前缀 |
|
只有FlagsAttribute的枚举应该使用复数名称 |
|
参数名称不应与成员名称相对应 |
|
标识符不应该包含类型名称 |
|
属性名称不应与get方法相匹 |
|
标识符不应该有不正确的前缀 |
|
类型名称不应该与命名空间 |
|
参数名称应与基类声明相一致 |
|
使用首选术语 |
|
文字应该正确的拼写 |