C#编程中的特殊功能与特性
1. 不可动态调用的函数
有些函数无法进行动态调用,具体包括:
- 扩展方法(通过扩展方法语法)
- 接口的任何成员(通过接口)
- 被子类隐藏的基类成员
这是因为动态绑定需要两个信息:要调用的函数名称和调用该函数的对象。然而,在上述三种不可调用的场景中,都涉及到一个额外的类型,这个类型只有在编译时才知道,并且无法动态指定这些额外的类型。
- 调用扩展方法时,额外的类型是扩展类,它是通过源代码中的指令隐式选择的(这些指令在编译后会消失)。
- 通过接口调用成员时,需要通过隐式或显式转换来传递额外的类型。(对于显式实现,不转换为接口就无法调用成员)。
- 调用隐藏的基类成员时,必须通过转换或 base 关键字指定额外的类型,而这个额外的类型在运行时会丢失。
2. 运算符重载
可以重载运算符,为自定义类型提供更自然的语法。运算符重载最适合用于实现表示相当原始数据类型的自定义结构体。例如,自定义数值类型是运算符重载的理想选择。
可以重载以下符号运算符:
+ - * / ++ -- ! ~ % & | ^
== != < << >> >
可以重写隐式和显式转换(使用 implicit 和 explicit 关键字),也可以重写 tr
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



