托管代码的“基本设计准则规则”规则集
可以使用“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对象,而不是字符串 |
|
提供反序列化方法可选字段 |