当前位置:嗨网首页>书籍在线阅读

17-分发

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

4.6.1 分发

分发是一个从面向对象编程范式中借鉴的概念,主要用于描述被称为多态的上下文中的一种特性。在面向对象程序设计(Object-Oriented Programming,OOP)中,当API是泛型或者接收实现为接口的参数时,必须弄清楚参数在传递给API的类型实例上调用什么方法实现。多态的上下文中的方法解析过程被称为分发,调用该方法被称为分发化(dispatching)。在支持多态的主流语言中,分发可以通过以下任意一种方式进行。

  • 静态分发 :当在编译期决定要调用的方法时,它被称为静态分发或早期绑定。方法的签名用于决定调用的方法,所有这些都在编译期决定。在Rust中,泛型展示了这种形式的分发,因为即使泛型函数可以接收许多参数,也会在编译期使用具体类型生成函数的专用副本。
  • 动态分发 :在面向对象的语言中,有时直到运行时才能确定调用的方法。这是因为具体类型被隐藏,并且只有接口方法可用于调用该类型。

在Java中,当函数只有参数时就是这种情况,即接口。

这种情况只能通过动态分发来处理。在动态分发过程中,可通过对 vtable 接口的实现列表进行查找,并调用该方法来动态确定相关方法。vtable是一个函数指针列表,指向每个类型的实现方法。由于方法调用过程中存在额外的间接指针引用,所以这需要更多的资源开销。

接下来让我们探讨特征对象。