用户定义的转换-保险基础数据模型200801版

6.3标准转换是那些预先定义的转换,它们可以作为用户定义转换的组成部分出现。 6.3.1标准隐式转换下列隐式转换属于标准隐式转换: 标识转换(第6.1.1节) 隐式数值转换(第6.1.2节) 可以为null的隐式转换(第6.1.4节) 隐式引用转换(第6.1.6节) 装箱转换(第6.1.7节) 隐式常量表达式转换(第6.1.8节) 涉及类型形参的隐式转换(第6.1.10节)标准隐式转换特别排除了用户定义的隐式转换。 6.3.2标准显式转换包括所有的标准隐式转换以及一个显式转换的子集,该子集是由那些与已知的标准隐式转换反向的转换组成的。换言之,如果存在一个从A类型到B类型的标准隐式转换,则一定存在与其对应的两个标准显式转换(一个是从A类型到B类型,另一个是从B类型到A类型)。 6.4用户定义的转换C#允许通过用户定义的转换(user-defined conversion)来增加预定义的隐式和显式转换。用户定义的转换是通过在类类型和结构类型中声明转换运算符(第10.3节)而引入的。 6.4.1允许的用户定义转换C#只允许声明某些用户定义的转换。具体而言,不可能重新定义已存在的隐式或显式转换。对于给定的源类型S和目标类型T,如果S或T是可以为null的类型,则让S0和T0引用它们的基础类型,否则S0和T0分别等于S和T。仅当以下条件皆为真时,才允许类或结构声明从源类型S到目标类型T的转换:  S0和T0是不同的类型。  S0和T0中有一个是声明该运算符的类类型或结构类型。  S0和T0都不是interface-type。 除用户定义的转换之外,不存在从S到T或从T到S的转换。适用于用户定义的转换的限制在第10.3节中有进一步讨论。 6.4.2提升转换运算符给定一个从不可以为null的值类型S到不可以为null的值类型T的用户定义转换运算符,存在从S?转换为T?的提升转换运算符(lifted conversion operator)。这个提升转换运算符执行从S?到S的解包,接着是从S到T的用户定义转换,然后是从T到T?的包装,null值的S?直接转换为null值的T?除外。
pdf 文件大小:2.95MB