首页 > 解决方案 > 编译时的含义?

问题描述

我的问题:“编译时”到底是什么意思?我在下面提出我的理解以及我感到困惑的地方。

编译是从 .vb 文件生成单个可执行 .exe 文件的过程。有几种方法可以做到这一点,例如使用开发人员命令窗口或 MSDOS 中的 VBC.EXE 命令。我理解“编译时”的方式是执行这样的命令并生成 exe 文件的时间。以下是我觉得令人困惑的:

  1. 当我写 Dim i = 5 时,编译器推断或“知道”变量“i”是一个整数。
  2. 如果我想使用控制台类的 Writeline 方法打印整数或字符串,那么编译器会自动确定它应该调用哪个重载版本。所以在这种情况下,编译器也“知道”——这也称为编译时多态性。

我的困惑:由于在上述两种情况下编译器推断或知道变量的类型或在我们输入完句子后要调用的重载方法的版本,这是否也称为编译时?我们在这里没有给出任何类型的编译命令。

  1. 编译时定义的另一个混淆是指我们显式定义重载方法的情况。在 writeline 方法的情况下,我们从智能感知给出的弹出窗口中知道,在我们完成输入句子后,立即调用具有正确签名的版本。现在,当我们定义重载方法时,当我们在程序中的某个地方调用函数(取决于签名)时,编译器是否知道在我们完成输入代码之后调用哪个版本?或者编译器在生成 exe 文件后是否知道这一点?这是编译时多态性的一个例子。但那么哪个时间或哪个步骤是“编译时间”?

标签: .netvb.net

解决方案


我们在这里没有给出任何类型的编译命令。

不,但大多数现代 IDE 可以执行与编译器类似的“静态分析”来确定类型等。有些甚至执行非常轻量级的“编译”来确定哪些重载是合适的,等等。

另请注意,IDE 和实际编译器可能并不总是一致。IDE 分析的设计速度非常快,因此 IDE 进行的分析可能不如静态编译器健壮和准确。

所以从某种意义上说,这些都是“编译时”,因为唯一可用的信息是代码中存在的信息。这与“运行时”相反,在“运行时”中,用户输入、环境和状态等其他因素可以以编译器无法解释的方式改变程序的流程和解释。


推荐阅读