在 C# 中,预定义类型转换和用户定义类型转换的区别是什么?请说明如何实现用户定义的类型转换。
考察说明
考查对 C# 类型转换机制的理解,重点在于区分预定义与用户定义转换,并掌握实现自定义转换的方法。
回答思路
- 【回答框架 1】预定义类型转换由 C# 编译器提供用于内置类型,如 int 到 long 的隐式转换和 long 到 int 的显式转换(可能溢出),转换规则由语言规范固定,用户不能更改。
- 【回答框架 2】用户定义类型转换允许为自定义类型定义显式或隐式转换,需定义为 public static,并使用 implicit 或 explicit 关键字,且转换需在源类型或目标类型之一中定义。
- 【回答框架 3】实现用户定义转换时,必须使用 operator 关键字,格式为 public static implicit operator TargetType(SourceType source),方法体实现转换逻辑,如将自定义类转换为字符串。
- 【回答框架 4】注意用户定义转换不能与内置转换冲突,且不能定义到 object 或从 object 转换,且隐式转换不应抛出异常或丢失数据,显式转换可以设计为可能失败。
- 【关键点 1】预定义转换是编译器内建,不能修改,包括隐式和显式转换。
- 【关键点 2】用户定义转换使用 public static implicit/explicit operator 语法实现。
- 【关键点 3】隐式转换应保证安全不抛异常,显式转换可能失败需调用方处理。
- 【易错点 1】错误地认为用户定义转换可以覆盖预定义类型之间的转换。
- 【易错点 2】在隐式转换中抛出异常或导致意外数据丢失,违反隐式转换设计原则。
- 【易错点 3】忽略用户定义转换与运算符重载的区分,容易混淆。