C# 中的运算符重载与自定义类型转换
1. 运算符重载概述
并非所有运算符都能被重载。以下是可重载运算符的分类、运算符及相关限制:
| 类别 | 运算符 | 限制 |
| ---- | ---- | ---- |
| 算术二元运算符 | +, , /, -, % | 无 |
| 算术一元运算符 | +, -, ++, – | 无 |
| 按位二元运算符 | &, |, ^, <<, >> | 无 |
| 按位一元运算符 |!, ~ | 无 |
| 布尔运算符 | true, false | 必须成对重载 |
| 比较运算符 | ==, != | 必须成对重载 |
| 比较运算符 | >=, <=, >, < | 无 |
| 赋值运算符 | +=, -=, =, /=, >>=, <<=, %=, &=, |=, ^= | 不能显式重载,在重载单个运算符(如 +, -, % 等)时会隐式重载 |
| 索引运算符 | [] | 不能直接重载,可通过索引器成员类型支持 |
| 强制类型转换运算符 | () | 不能直接重载,可通过自定义类型转换定义 |
2. 自定义类型转换
在 C# 中,类型转换分为隐式转换和显式转换。对于显式转换,需要在代码中用括号指定目标数据类型。例如:
int I = 3;
long l = I; // 隐式转换
short s