C# 异常类 Exception 枚举所有类型的异常

一、基础

在C# 里,异常处理就是C# 为处理错误情况提供的一种机制。它为每种错误情况提供了定制的处理方式,并且把标识错误的代码与处理错误的代码分离开来。

对.NET类来说,一般的 异常类System.Exception 派生于 System.Object。还有许多定义好的异常类(如:System.SystemException、System.ApplicationException等),他们又派生于 System.Exception 类。其中System.ApplicationException 类是第三方定义的异常类,如果我们要自定义异常类,那么就应派生于它。

在代码中对异常进行处理,一般要使用三个代码块:

Ø Try 块的代码是程序中可能出现错误的操作部分。

Ø Catch 块的代码是用来处理各种错误的部分(可以有多个)。必须正确排列捕获异常的catch子句,范围小的Exception放在前面的catch。即如果Exception之间存在继承关系,就应把子类的Exception放在前面的catch子句中

Ø Finally 块的代码用来清理资源或执行要在try块末尾执行的其他操作(可以省略)。且无论是否产生异常,Finally块都会执行。

二、异常处理

不管程序写得再好,异常都可能会发生,而程序也必须能够处理可能出现的错误。所以我们要站在异常一定可能会发生的角度来编写异常处理程序,应对程序有可能发生的错误建立一个良好的异常处理策略。

异常产生的时候,我们想知道的是什么原因造成的错误以及错误的相关信息。我们可以根据实际情况抛出具体类型的异常,方便捕捉到异常时做出具体的处理。在编写代码过程中,可以使用系统已定义的相关异常类以及自定义的异常类来实例化并抛出我们需要的异常。如一个不可能实现的接口,我们可以抛出“System.NotSupportedExceptiion”的异常来告诉接口的调用者。

在处理异常的时候,我们应该将可处理的具体异常分别在catch 块中做出相应处理,否则程序将终止运行。针对每一种异常,以不同方式处理,避免对所有异常做出一样的处理。并且在异常产生时,给用户一个友好的提示(普通用户对异常的具体内容是不明白的,这就需要我们给出相关的简要信息和解决方案,或则告之联系管理员等。),并在可能的情况下给用户提供可能的选择(终止,重试,忽略),让用户来决定程序的运行方向。同时,要将异常做日志记录。但不是所有异常都是必须记录的,比如一些可预料并且能让程序解决的错误我们就不需要记录它。

记录异常我们可以采取如下一些方式:

Ø 在文件中记录异常。便于技术人员查看所发生的异常,从而日后对程序进行改进。

Ø 在数据库中记录异常。数据库支持查询,这样在后期就能够对异常进行分类查询等操作,便于查看与管理。

Ø 在Eventlog中记录异常:能够远程操作,方便系统管理员监控所有计算机的异常。

除了具体的、可预料到的异常外,还有未预料的异常。像这类异常是我们不愿意看到了,但发生了也只能暂时结束程序的运行,这里如果做好了日志就能为我们解决和调试问题带来了方便。还有,要避免使用了try-catch但没有处理异常的情况,否则就相当于给异常放行(这种情况还不如根本就不去捕获它)。

处理完异常,我们还应该注意在finally块中释放相关资源、还原相关设置信息等收尾工作。

在做异常处理的时候,最好能在应用程序所有的入口处(事件处理函数,主函数,线程入口)使用try-catch。 但是不要在程序构造函数入口处添加try-catch,因为此处产生异常,它自己并没有能力来处理,因为它还没有构造完毕,只能再向外层抛出异常。

在一般情况下使用异常机制来处理错误,能使整个程序的结构清晰、代码简单(标识错误的代码与处理错误代码分离),但我们也不能盲目使用异常。而且使用异常,可能会在一定程度上影响到程序的性能(C#中使用异常一般不影响性能)。对于一些简单的、能够提前避免的错误,我们还是应该在try块外面及早做出处理。

C#异常类相关总结

C#异常类一、基类Exception

C#异常类二、常见的异常类

1、SystemException类:该类是System命名空间中所有其他异常类的基类。(建议:公共语言运行时引发的异常通常用此类)

2、ApplicationException类:该类表示应用程序发生非致命错误时所引发的异常(建议:应用程序自身引发的异常通常用此类)

C#异常类三、与参数有关的异常类

此类异常类均派生于SystemException,用于处理给方法成员传递的参数时发生异常

1、ArgumentException类:该类用于处理参数无效的异常,除了继承来的属性名,此类还提供了string类型的属性ParamName表示引发异常的参数名称。

2、FormatException类:该类用于处理参数格式错误的异常。

C#异常类四、与成员访问有关的异常

1、MemberAccessException类:该类用于处理访问类的成员失败时所引发的异常。失败的原因可能的原因是没有足够的访问权限,也可能是要访问的成员根本不存在(类与类之间调用时常用)

2、MemberAccessException类的直接派生类:

i、FileAccessException类:该类用于处理访问字段成员失败所引发的异常

ii、MethodAccessException类:该类用于处理访问方法成员失败所引发的异常

iii、MissingMemberException类:该类用于处理成员不存在时所引发的异常

C#异常类五、与数组有关的异常

以下三个类均继承于SystemException类

1、IndexOutOfException类:该类用于处理下标超出了数组长度所引发的异常

2、ArrayTypeMismatchException类:该类用于处理在数组中存储数据类型不正确的元素所引发的异常

3、RankException类:该类用于处理维数错误所引发的异常

C#异常类六、与IO有关的异常

1、IOException类:该类用于处理进行文件输入输出操作时所引发的异常。

2、IOException类的5个直接派生类:

i、DirectionNotFoundException类:该类用于处理没有找到指定的目录而引发的异常。

ii、FileNotFoundException类:该类用于处理没有找到文件而引发的异常。

iii、EndOfStreamException类:该类用于处理已经到达流的末尾而还要继续读数据而引发的异常。

iv、FileLoadException类:该类用于处理无法加载文件而引发的异常。

v、PathTooLongException类:该类用于处理由于文件名太长而引发的异常。

C#异常类七、与算术有关的异常

1、ArithmeticException类:该类用于处理与算术有关的异常。

2、ArithmeticException类的派生类:

i、DivideByZeroException类:表示整数货十进制运算中试图除以零而引发的异常。

ii、NotFiniteNumberException类:表示浮点数运算中出现无穷打或者非负值时所引发的异常。

http://www.cnblogs.com/goody9807/archive/2012/09/04/2670753.html

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目录 1. 简介 ... 1 2. 词法结构 ... 31 2.1 程序 ... 31 2.2 文法 ... 31 2.2.1 文法表示法 31 2.2.2 词法文法... 32 2.2.3 句法文法... 32 2.3 词法分析 .. 32 2.3.1 行结束符... 33 2.3.2 注释... 33 2.3.3 空白... 34 2.4 标记 ... 34 iv C#语言规范 2.4.1 Unicode 字符转义序列 ... 35 2.4.2 标识符. 35 2.4.3 关键字. 37 2.4.4 文本... 37 2.4.4.1 布尔值 .. 37 2.4.4.2 整数 ... 38 2.4.4.3 实数 ... 39 2.4.4.4 字符 ... 39 2.4.4.5 字符串 .. 40 2.4.4.6 null 文本 ... 42 2.4.5 运算符和标点符号... 42 2.5 预处理指令 42 2.5.1 条件编译符号... 43 2.5.2 预处理表达式... 43 2.5.3 声明指令... 44 2.5.4 条件编译指令... 45 2.5.5 诊断指令... 47 2.5.6 区域指令... 47 2.5.7 行指令. 48 2.5.8 Pragma 指令 ... 48 2.5.8.1 Pragma warning .. 49 3. 基本概念 ... 50 3.1 应用程序启动 ... 50 3.2 应用程序终止 ... 50 3.3 声明 ... 51 3.4 成员 ... 53 3.4.1 命名空间成员... 53 3.4.2 结构成员... 53 3.4.3 枚举成员... 53 3.4.4 类成员. 53 3.4.5 接口成员... 54 3.4.6 数组成员... 54 3.4.7 委托成员... 54 3.5 成员访问 .. 54 3.5.1 已声明可访问性. 54 3.5.2 可访问域... 55 3.5.3 实例成员的受保护访问 57 3.5.4 可访问性约束... 58 3.6 签名和重载 59 3.7 范围 ... 60 3.7.1 名称隐藏... 62 3.7.1.1 通过嵌套隐藏 ... 62 3.7.1.2 通过继承隐藏 ... 63 3.8 命名空间和类型名称 64 目录 3.8.1 完全限定名 66 3.9 自动内存管理 ... 66 3.10 执行顺序 69 4. 类型 ... 71 4.1 值类型 . 71 4.1.1 System.ValueType 类型 ... 72 4.1.2 默认构造函数... 72 4.1.3 结构类型... 73 4.1.4 简单类型... 73 4.1.5 整型... 74 4.1.6 浮点型. 75 4.1.7 decimal 类型 ... 76 4.1.8 bool 类型... 76 4.1.9 枚举类型... 76 4.1.10 可以为 null 的类型.. 76 4.2 引用类型 .. 77 4.2.1 类类型. 78 4.2.2 对象类型... 78 4.2.3 string 类型.. 78 4.2.4 接口类型... 78 4.2.5 数组类型... 78 4.2.6 委托类型... 78 4.3 装箱和拆箱 79 4.3.1 装箱转换... 79 4.3.2 拆箱转换... 80 4.4 构造类型 .. 81 4.4.1 类型实参... 81 4.4.2 开放和封闭类型. 82 4.4.3 绑定和未绑定类型... 82 4.4.4 满足约束... 82 4.5 类型形参 .. 83 4.6 表达式目录树类型 .. 84 5. 变量 ... 85 5.1 变量类别 .. 85 5.1.1 静态变量... 85 5.1.2 实例变量... 85 5.1.2.1 类中的实例变量 .. 85 5.1.2.2 结构中的实例变量 ... 85 5.1.3 数组元素... 86 5.1.4 值参数. 86 5.1.5 引用形参... 86 5.1.6 输出形参... 86 5.1.7 局部变量... 86 5.2 默认值 . 87 vi C#语言规范 5.3 明确赋值 .. 87 5.3.1 初始已赋值变量. 88 5.3.2 初始未赋值变量. 88 5.3.3 确定明确赋值的细则 88 5.3.3.1 一般语句规则 ... 89 5.3.3.2 块语句、checked 和 unchecked 语句 . 89 5.3.3.3 表达式语句 . 89 5.3.3.4 声明语句 ... 90 5.3.3.5 if 语句.. 90 5.3.3.6 switch 语句. 90 5.3.3.7 while 语句 ... 90 5.3.3.8 do 语句 . 90 5.3.3.9 for 语句 91 5.3.3.10 break、continue 和 goto 语句 91 5.3.3.11 throw 语句 91 5.3.3.12 return 语句 91 5.3.3.13 try-catch 语句 ... 92 5.3.3.14 try-finally 语句 ... 92 5.3.3.15 try-catch-finally 语句 92 5.3.3.16 foreach 语句 93 5.3.3.17 using 语句 . 93 5.3.3.18 lock 语句 ... 93 5.3.3.19 yield 语句 .. 94 5.3.3.20 简单表达式的一般规则 94 5.3.3.21 带有嵌入表达式的表达式的一般规则 . 94 5.3.3.22 调用表达式和对象创建表达式 ... 94 5.3.3.23 简单赋值表达式 95 5.3.3.24 && 表达式 95 5.3.3.25 || 表达式 ... 96 5.3.3.26 ! 表达式... 96 5.3.3.27 ?? 表达式 .. 97 5.3.3.28 ?: 表达式 ... 97 5.3.3.29 匿名函数 ... 97 5.4 变量引用 .. 98 5.5 变量引用的原子性 .. 98 6. 转换 ... 99 6.1 隐式转换 .. 99 6.1.1 标识转换... 99 6.1.2 隐式数值转换... 99 6.1.3 隐式枚举转换. 100 6.1.4 可以为 null 的隐式转换... 100 6.1.5 null 文本转换 .. 100 6.1.6 隐式引用转换. 100 6.1.7 装箱转换.. 101 目录 6.1.8 隐式常量表达式转换... 101 6.1.9 涉及类型形参的隐式转换. 101 6.1.10 用户定义的隐式转换 102 6.1.11 匿名函数转换和方法组转换 ... 102 6.2 显式转换 102 6.2.1 显式数值转换. 102 6.2.2 显式枚举转换. 104 6.2.3 可以为 null 的显式转换. 104 6.2.4 显式引用转换. 105 6.2.5 拆箱转换.. 105 6.2.6 涉及类型形参的显式转换. 105 6.2.7 用户定义的显式转换... 106 6.3 标准转换 106 6.3.1 标准隐式转换. 106 6.3.2 标准显式转换. 107 6.4 用户定义的转换 ... 107 6.4.1 允许的用户定义转换... 107 6.4.2 提升转换运算符... 107 6.4.3 用户定义转换的计算... 107 6.4.4 用户定义的隐式转换... 108 6.4.5 用户定义的显式转换... 109 6.5 匿名函数转换 . 110 6.5.1 匿名函数转换为委托类型的计算 111 6.5.2 匿名函数转换为表达式目录树类型的计算 111 6.5.3 实现示例.. 111 6.6 方法组转换 ... 114 7. 表达式 ... 116 7.1 表达式的分类 . 116 7.1.1 表达式的值... 117 7.2 通过调用索引器的 get-accessor 来获取索引器访问表达式的值。... 117 7.3 运算符 ... 117 7.3.1 运算符的优先级和顺序关联性 ... 117 7.3.2 运算符重载... 118 7.3.3 一元运算符重载决策... 119 7.3.4 二元运算符重载决策... 119 7.3.5 候选用户定义运算符... 120 7.3.6 数值提升.. 120 7.3.6.1 一元数值提升 ... 120 7.3.6.2 二元数值提升 ... 121 7.3.7 提升运算符... 121 7.4 成员查找 122 7.4.1 基类型... 123 7.5 函数成员 123 7.5.1 实参列表.. 125 viii C#语言规范 7.5.2 类型推断.. 127 7.5.2.1 第一阶段 ... 128 7.5.2.2 第二阶段 ... 128 7.5.2.3 输入类型 ... 129 7.5.2.4 输出类型 ... 129 7.5.2.5 依赖 ... 129 7.5.2.6 输出类型推断 ... 129 7.5.2.7 参数类型显式推断 ... 129 7.5.2.8 精确推断 ... 129 7.5.2.9 下限推断 ... 129 7.5.2.10 固定 .. 130 7.5.2.11 推断返回类型 .. 130 7.5.2.12 方法组转换的类型推断 131 7.5.2.13 查找一组表达式的最通用类型 .. 131 7.5.3 重载决策.. 131 7.5.3.1 适用函数成员 ... 132 7.5.3.2 更好的函数成员 132 7.5.3.3 表达式的更佳转换 ... 133 7.5.3.4 类型的更佳转换 134 7.5.3.5 泛型类中的重载 134 7.5.4 函数成员调用. 135 7.5.4.1 已装箱实例上的调用 ... 136 7.6 基本表达式 ... 136 7.6.1 文本. 137 7.6.2 简单名称.. 137 7.6.2.1 块中的固定含义 138 7.6.3 带括号的表达式... 139 7.6.4 成员访问.. 139 7.6.4.1 相同的简单名称和类型名称 . 141 7.6.4.2 语法多义性 . 141 7.6.5 调用表达式... 142 7.6.5.1 方法调用 ... 142 7.6.5.2 扩展方法调用 ... 143 7.6.5.3 委托调用 ... 146 7.6.6 元素访问.. 146 7.6.6.1 数组访问 ... 146 7.6.6.2 索引器访问 . 147 7.6.7 this 访问 147 7.6.8 base 访问 148 7.6.9 后缀增量和后缀减量运算符.. 148 7.6.10 new 运算符 ... 149 7.6.10.1 对象创建表达式 ... 149 7.6.10.2 对象初始值设定项 . 150 7.6.10.3 集合初始值设定项 . 152 7.6.10.4 数组创建表达式 ... 153 目录 7.6.10.5 委托创建表达式 ... 155 7.6.10.6 匿名对象创建表达式 .. 156 7.6.11 typeof 运算符 157 7.6.12 checked 和 unchecked 运算符 159 7.6.13 默认值表达式. 161 7.6.14 匿名方法表达式... 161 7.7 一元运算符 ... 162 7.7.1 一元加运算符. 162 7.7.2 一元减运算符. 162 7.7.3 逻辑否定运算符... 163 7.7.4 按位求补运算符... 163 7.7.5 前缀增量和减量运算符... 163 7.7.6 强制转换表达式... 164 7.8 算术运算符 ... 164 7.8.1 乘法运算符... 165 7.8.2 除法运算符... 165 7.8.3 余数运算符... 166 7.8.4 加法运算符... 167 7.8.5 减法运算符... 169 7.9 移位运算符 ... 170 7.10 关系和类型测试运算符 ... 171 7.10.1 整数比较运算符... 172 7.10.2 浮点比较运算符... 173 7.10.3 小数比较运算符... 173 7.10.4 布尔相等运算符... 173 7.10.5 枚举比较运算符... 174 7.10.6 引用类型相等运算符 174 7.10.7 字符串相等运算符... 175 7.10.8 委托相等运算符... 176 7.10.9 相等运算符和 null.. 176 7.10.10 is 运算符 ... 176 7.10.11 as 运算符 ... 177 7.11 逻辑运算符 ... 178 7.11.1 整数逻辑运算符... 178 7.11.2 & 运算符 178 7.11.3 枚举逻辑运算符... 178 7.11.4 布尔逻辑运算符... 178 7.11.5 可以为 null 的布尔逻辑运算符 ... 179 7.12 条件逻辑运算符 .. 179 7.12.1 布尔条件逻辑运算符 180 7.12.2 用户定义的条件逻辑运算符 ... 180 7.13 空合并运算符 ... 180 7.14 条件运算符 ... 181 7.15 匿名函数表达式 .. 182 7.15.1 匿名函数签名. 183 x C#语言规范 7.15.2 匿名函数体... 183 7.15.3 重载决策 184 7.15.4 外层变量 185 7.15.4.1 捕获的外层变量 ... 185 7.15.4.2 局部变量实例化 ... 186 7.15.5 匿名函数表达式的计算 188 7.16 查询表达式 ... 188 7.16.1 查询表达式中的多义性 189 7.16.2 查询表达式转换... 189 7.16.2.1 带有延续部分的 Select 和 groupby 子句 ... 190 7.16.2.2 显式范围变量类型 . 190 7.16.2.3 简并查询表达式 ... 191 7.16.2.4 From、let、where、join 和 orderby 子句 191 7.16.2.5 Select 子句 194 7.16.2.6 Groupby 子句 ... 195 7.16.2.7 透明标识符 ... 195 7.16.3 查询表达式模式... 196 7.17 赋值运算符 ... 197 7.17.1 简单赋值 198 7.17.2 复合赋值 200 7.17.3 事件赋值 201 7.18 表达式 .. 201 7.19 常量表达式 ... 201 7.20 布尔表达式 ... 202 8. 语句 .. 204 8.1 结束点和可到达性 204 8.2 块 205 8.2.1 语句列表.. 206 8.3 空语句 ... 206 8.4 标记语句 207 8.5 声明语句 207 8.5.1 局部变量声明. 207 8.5.2 局部常量声明. 209 8.6 表达式语句 ... 209 8.7 选择语句 209 8.7.1 if 语句 210 8.7.2 switch 语句 ... 210 8.8 迭代语句 213 8.8.1 while 语句 . 213 8.8.2 do 语句... 214 8.8.3 for 语句 ... 214 8.8.4 foreach 语句... 215 8.9 跳转语句 218 8.9.1 break 语句 . 218 目录 8.9.2 continue 语句 ... 219 8.9.3 goto 语句.. 219 8.9.4 return 语句 220 8.9.5 throw 语句 221 8.10 try 语句 . 221 8.11 checked 语句和 unchecked 语句.. 224 8.12 lock 语句 224 8.13 using 语句... 225 8.14 yield 语句 ... 226 9. 命名空间 . 229 9.1 编译单元 229 9.2 命名空间声明 . 229 9.3 Extern 别名... 230 9.4 using 指令 231 9.4.1 using 别名指令 231 9.4.2 Using 命名空间指令 234 9.5 命名空间成员 . 235 9.6 类型声明 236 9.7 命名空间别名限定符 ... 236 9.7.1 别名的唯一性. 237 10. 类 ... 239 10.1 类声明 .. 239 10.1.1 类修饰符 239 10.1.1.1 抽象类 ... 239 10.1.1.2 密封类 ... 240 10.1.1.3 静态类 ... 240 10.1.2 分部修饰符... 241 10.1.3 类型形参 241 10.1.4 类基本规范... 241 10.1.4.1 基类 .. 242 10.1.4.2 接口实现 . 243 10.1.5 类型形参约束. 243 10.1.6 类体. 246 10.2 分部类型 247 10.2.1 属性. 247 10.2.2 修饰符... 247 10.2.3 类型形参和约束... 247 10.2.4 基类. 248 10.2.5 基接口... 248 10.2.6 成员. 249 10.2.7 分部方法 249 10.2.8 名称绑定 251 10.3 类成员 .. 252 10.3.1 实例类型 253 xii C#语言规范 10.3.2 构造类型的成员... 253 10.3.3 继承. 254 10.3.4 new 修饰符 ... 255 10.3.5 访问修饰符... 255 10.3.6 构成类型 255 10.3.7 静态成员和实例成员 255 10.3.8 嵌套类型 256 10.3.8.1 完全限定名 ... 256 10.3.8.2 已声明可访问性 ... 257 10.3.8.3 隐藏 .. 257 10.3.8.4 this 访问 .. 258 10.3.8.5 对包含类型的私有和受保护成员的访问 .. 259 10.3.8.6 泛型类中的嵌套类型 .. 260 10.3.9 保留成员名称. 260 10.3.9.1 为属性保留的成员名称 261 10.3.9.2 为事件保留的成员名称 261 10.3.9.3 为索引器保留的成员名称 ... 261 10.3.9.4 为析构函数保留的成员名称 ... 262 10.4 常量 . 262 10.5 字段 . 263 10.5.1 静态字段和实例字段 264 10.5.2 只读字段 265 10.5.2.1 对常量使用静态只读字段 ... 265 10.5.2.2 常量和静态只读字段的版本控制 266 10.5.3 可变字段 266 10.5.4 字段初始化... 267 10.5.5 变量初始值设定项... 268 10.5.5.1 静态字段初始化 ... 268 10.5.5.2 实例字段初始化 ... 270 10.6 方法 . 270 10.6.1 方法形参 272 10.6.1.1 值形参 ... 273 10.6.1.2 引用形参 . 273 10.6.1.3 输出形参 . 274 10.6.1.4 形参数组 . 274 10.6.2 静态方法和实例方法 277 10.6.3 虚方法... 277 10.6.4 重写方法 279 10.6.5 密封方法 281 10.6.6 抽象方法 281 10.6.7 外部方法 283 10.6.8 分部方法 283 10.6.9 扩展方法 283 10.6.10 方法体.. 284 10.6.11 方法重载... 285 目录 10.7 属性 . 285 10.7.1 静态属性和实例属性 286 10.7.2 访问器... 286 10.7.3 自动实现的属性... 291 10.7.4 可访问性 291 10.7.5 虚、密封、重写和抽象访问器 .. 292 10.8 事件 . 294 10.8.1 类似字段的事件... 296 10.8.2 事件访问器... 297 10.8.3 静态事件和实例事件 298 10.8.4 虚、密封、重写和抽象访问器 .. 298 10.9 索引器 .. 299 10.9.1 索引器重载... 302 10.10 运算符 302 10.10.1 一元运算符. 304 10.10.2 二元运算符. 304 10.10.3 转换运算符. 305 10.11 实例构造函数 ... 307 10.11.1 构造函数初始值设定项. 308 10.11.2 实例变量初始值设定项. 308 10.11.3 构造函数执行... 308 10.11.4 默认构造函数... 310 10.11.5 私有构造函数... 311 10.11.6 可选的实例构造函数形参.. 311 10.12 静态构造函数 ... 312 10.13 析构函数 ... 314 10.14 迭代器 315 10.14.1 枚举器接口. 315 10.14.2 可枚举接口. 315 10.14.3 产生类型... 316 10.14.4 枚举器对象. 316 10.14.4.1 MoveNext 方法 ... 316 10.14.4.2 Current 属性 ... 317 10.14.4.3 Dispose 方法 .. 317 10.14.5 可枚举对象. 318 10.14.5.1 GetEnumerator 方法 .. 318 10.14.6 实现示例... 318 11. 结构 325 11.1 结构声明 325 11.1.1 结构修饰符... 325 11.1.2 分部修饰符... 325 11.1.3 结构接口 325 11.1.4 结构体... 326 11.2 结构成员 326 xiv C#语言规范 11.3 类和结构的区别 .. 326 11.3.1 值语义... 326 11.3.2 继承. 327 11.3.3 赋值. 327 11.3.4 默认值... 328 11.3.5 装箱和取消装箱... 328 11.3.6 this 的含义 ... 330 11.3.7 字段初始值设定项... 330 11.3.8 构造函数 330 11.3.9 析构函数 331 11.3.10 静态构造函数... 331 11.4 结构示例 331 11.4.1 数据库整数类型... 332 11.4.2 数据库布尔类型... 333 12. 数组 336 12.1 数组类型 336 12.1.1 System.Array 类型. 336 12.1.2 数组和泛型 IList 接口 337 12.2 数组创建 337 12.3 数组元素访问 ... 337 12.4 数组成员 337 12.5 数组协变 338 12.6 数组初始值设定项 338 13. 接口 341 13.1 接口声明 341 13.1.1 接口修饰符... 341 13.1.2 分部修饰符... 341 13.1.3 基接口... 341 13.1.4 接口体... 342 13.2 接口成员 342 13.2.1 接口方法 343 13.2.2 接口属性 343 13.2.3 接口事件 344 13.2.4 接口索引器... 344 13.2.5 接口成员访问. 344 13.3 完全限定接口成员名 ... 346 13.4 接口实现 346 13.4.1 显式接口成员实现... 347 13.4.2 所实现接口的唯一性 349 13.4.3 泛型方法的实现... 350 13.4.4 接口映射 350 13.4.5 接口实现继承. 353 13.4.6 接口重新实现. 354 13.4.7 抽象类和接口. 356 目录 14. 枚举 357 14.1 枚举声明 357 14.2 枚举修饰符 ... 357 14.3 枚举成员 358 14.4 System.Enum 类型 . 360 14.5 枚举值和运算 ... 360 15. 委托 361 15.1 委托声明 361 15.2 委托兼容性 ... 363 15.3 委托实例化 ... 363 15.4 委托调用 364 16. 异常 367 16.1 导致异常的原因 .. 367 16.2 System.Exception 类 ... 367 16.3 异常的处理方式 .. 367 16.4 公共异常类 ... 368 17. 属性 369 17.1 属性类 .. 369 17.1.1 属性用法 369 17.1.2 定位和命名参数... 370 17.1.3 属性参数类型. 371 17.2 属性说明 371 17.3 属性实例 376 17.3.1 属性的编译... 376 17.3.2 属性实例的运行时检索 376 17.4 保留属性 377 17.4.1 AttributeUsage 属性 ... 377 17.4.2 Conditional 属性 ... 378 17.4.2.1 条件方法 . 378 17.4.2.2 条件属性类 ... 380 17.4.3 Obsolete 属性 381 17.5 交互操作的属性 .. 382 17.5.1 与 COM 和 Win32 组件的交互操作 ... 382 17.5.2 与其他 .NET 语言的交互操作 . 382 17.5.2.1 IndexerName 属性 .. 382 18. 不安全代码 383 18.1 不安全上下文 ... 383 18.2 指针类型 385 18.3 固定和可移动变量 388 18.4 指针转换 388 18.5 表达式中的指针 .. 389 18.5.1 指针间接寻址. 389 xvi C#语言规范 18.5.2 指针成员访问. 390 18.5.3 指针元素访问. 391 18.5.4 address-of 运算符 ... 391 18.5.5 指针递增和递减... 392 18.5.6 指针算术运算. 392 18.5.7 指针比较 393 18.5.8 sizeof 运算符 . 393 18.6 fixed 语句 ...

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值