高质量编程讲座 设计自定义异常指南

1避免使用深的异常层次结构。
2一定要从 System.Exception 或其他常见基本异常之一派生异常。
3异常类名称一定要以后缀 Exception 结尾。
4应使异常可序列化。 异常必须可序列化才能跨越应用程序域和远程处理边界正确工作。
5一定要在所有异常上都提供(至少是这样)下列常见构造函数。 确保参数的名称和类型与在下面的代码示例中使用的那些相同。
public class NewException : BaseException, ISerializable
{
public NewException()
{
// Add implementation.
}
public NewException(string message)
{
// Add implementation.
}
public NewException(string message, Exception inner)
{
// Add implementation.
}

// This constructor is needed for serialization.
protected NewException(SerializationInfo info, StreamingContext context)
{
// Add implementation.
}
}
6 一定要只在要求适合的权限后,才通过 System.Object.ToString 的重写报告安全敏感信息。 如果权限要求失败,则返回一个不包括安全敏感信息的字符串。

7 一定要以私有异常状态存储有用的安全敏感信息。 请确保只有受信任的代码才能获取该信息。

8 考虑提供异常属性,以便可以以编程方式访问除消息字符串之外与异常相关的额外信息。

时间: 2024-11-13 03:20:42

高质量编程讲座 设计自定义异常指南的相关文章

《C++/C高质量编程指南》笔记

复习: C/C++高质量编程指南: [规则1-2-1]为了防止头文件被重复引用,应当用ifndef/define/endif结构产生预处理块. [规则1-2-2]用 #include <filename.h> 格式来引用标准库的头文件(编译器将从标准库目录开始搜索). [规则1-2-3]用 #include “filename.h” 格式来引用非标准库的头文件(编译器将从用户的工作目录开始搜索). [建议1-2-1]头文件中只存放“声明”而不存放“定义” [规则2-2-1]一行代码只做一件事情

C++高质量编程笔记

/* * 函数介绍: * 输入参数: * 输出参数: * 返回值 : */ void Function(float x, float y, float z) { - } if (-) { - while (-) { - } // end of while - } // end of if 版权和版本的声明位于H和CPP的开头(参见示例 1-1),主要内容有: ( 1)版权信息. ( 2)文件名称,标识符,摘要. ( 3)当前版本号,作者/修改者,完成日期. ( 4)版本历史信息. 头文件里面的内

c++高质量编程手册

怡化主管强烈要求我读这本书.... 笔记尚未完成,持续更新呗.. 第1章 高质量软件开发之道 1.1 软件质量基本概念 1.1.1 如何理解软件的质量:功能性和非公能性 1.1.2 提高软件质量的基本方法: 一次性编出高质量的程序 1.1.3 "零缺陷"理念 1.2 细说软件质量属性 1.2.1 正确性: 需求范围内的需求 1.2.2 健壮性  需求外的扩展需求 1容错  2恢复 1.2.3 可靠性  你平均无故障时间衡量 1.2.4 性能  时间-空间效率 优化数据结构,算法,代码来

高质量编程指南备忘

//// * & 仅靠变量名 //// 不可for循环内修改循环变量 //// 太深的嵌套可以用goto跳出 ////眼力 char *GetStr() { char p[] = ""; //生命周期 return p; } char *GetStr() { char *p = ""; //静态存储 只读 return p; } //// 如果p是NULL,那么free多次ok:否则错误. //// delete 数组不要忘了[] 类中调用同成员函数名的全局

指针参数的传递(节选 C++/C 高质量编程 林锐)

指针参数是如何传递内存的 如果函数的参数是一个指针,不要指望用该指针去申请动态内存.示例7-4-1中,Test函数的语句GetMemory(str, 200)并没有使str获得期望的内存,str依旧是NULL,为什么? void GetMemory(char *p, int num) { p = (char *)malloc(sizeof(char) * num); } void Test(void) { char *str = NULL; GetMemory(str, 100);    //

高质量编程的金玉良言——迪米特法则

迪米特法则: 如果两个类不必彼此间直接通信,那么这两个类就不应当发生直接的相互作用.如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用. 迪米特法则的根本目的是为了降低类与类之间的藕合度.因为一个类的藕合程度越弱,那么当这个类内部发生修改时,就不会波及到该类的使用者们. 降低藕合的方法: 尽量使一个类中能私有的成员私有化,只给外界提供简单的接口即可. "高内聚低耦合"的含义: 内聚就是一个模块内各个元素彼此结合的紧密程度,高内聚就是一个模块内各个元素彼此结合的紧

高质量编程的金玉良言——单一职责原则

"单一职责原则"的官方定义: 就一个类而言,应该仅有一个引起它变化的原因. 大白话讲: 在设计类的时候,应该要让每一个类仅有一个职责,每一个类只做一类事情,这就是单一职责原则. "每一个类只做一类事情"的好处: 如果一个类承担的职责过多,就等于把这些职责藕合在一起,一个职责的变化可能会削弱或抑制这个类完成其他职责的能力. 这种藕合会导致脆弱的设计,当变化发生时,设计会遭到意想不到的破坏. 在程序设计时,我们需要在类的职责分离上多加思考,做到单一职责,这样你的代码才是

高质量编程的金玉良言——依赖倒转原则

生活中的例子: 电脑的品牌有很多,但电脑中的所有部件都有标准的接口,不同的厂家都是按照标准去生产各个部件,这些部件的内部实现不同,但接口都是一样的,这样的话,如果我的联想电脑的内存条坏了,我随便买一根内存条插上都能使用. 之所以我们的电脑能使用任何厂家生产的内存条,是因为这些电脑生产厂家都是"面向接口"生产,而在软件世界中,面向接口编程就是依赖倒转. 依赖倒转的官方定义: 1.高层模块不应该依赖于低层模块,他们都应该依赖于抽象: 2.抽象不应该依赖于细节.细节应该依赖于抽象. 大白话讲

零售数字化必经哪四个阶段?CCFA这场高质量专题讲座值得一听!

本文整理自刘湛在CCFA专题分享的演讲实录,演讲主题为<NOME数字化零售之路> 本文的主要内容如下: ? 未来零售潜力来源于AI+BI ? 零售数字化演进的四个阶段 ? AlphaZero的启示 ? 零售核心主数据及相关分析 未来零售潜力来源于AI+BI 谢谢苏总邀请,首先说一下我们为什么选择和观远数据合作.观远数据是一家非常出色的新兴数据公司,在经过深入了解后,发现我们对数据赋能的理念非常相似,所以一拍即合.很快就决定达成合作. 为什么觉得理念非常相似呢?我觉得未来零售潜力一定是来自于AI