深入理解后期绑定与缓存机制
1. 绑定的基本概念
绑定是指名称与其所引用的目标之间的关联,也常被称为名称绑定。确定绑定方式有多种途径,可从作用域和时间两个方面对不同的绑定方法进行分类,如下表所示:
| 作用域 \ 时间 | 编译时(早期) | 运行时(后期) |
| — | — | — |
| 词法(静态) | C# | IronPython |
| 动态 | X | Lisp |
从作用域角度来看,绑定可以是词法的(也称为静态作用域)或动态的。词法作用域为名称绑定提供上下文,同一名称在不同作用域中可能引用不同的对象、变量、类等。从时间角度来看,绑定可分为早期绑定(编译时绑定)和后期绑定(运行时绑定)。早期绑定在编译时确定名称所引用的目标,而后期绑定则在运行时进行。后期绑定是动态语言的一个关键特性。
需要注意的是,作用域和时间这两个方面在很大程度上是正交的,但并非完全不相关。词法作用域规则既可以在编译时应用,也可以在运行时应用。然而,如果一种语言使用动态作用域规则进行名称绑定,由于这些规则的动态性质,在应用它们进行名称绑定时需要一些运行时信息,因此不可能设计出在编译时应用这些规则的编译器,这就是表格中标记为“X”的原因。
2. 调用点与早期绑定
调用点是代码中调用方法的位置。以以下 C# 代码为例:
String bob = "Bob";
String lowercaseBob = bob.ToLower();
第二行代码中的方法调用就是一个调用点。在静态语言(如 C#)中,编译
超级会员免费看
订阅专栏 解锁全文
7

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



