为什么这不是无限递归?默认变量初始化如何在VB.NET中工作?

fro*_*die 3 vb.net recursion initialization default-value

我在我的代码中犯了一个有趣的错误:

Dim endColumn As Integer = startColumn + endColumn - 1
Run Code Online (Sandbox Code Playgroud)

该代码实际上应该是:

Dim endColumn As Integer = startColumn + numColumns - 1
Run Code Online (Sandbox Code Playgroud)

有趣的是,我认为这段代码应该是递归的并且无限循环,因为endColumn类型的初始化调用本身.但是,似乎代码只是将未初始化的变量视为0,所以我得到了startColumn + 0 - 1.幕后发生了什么?变量何时被赋予默认值?

Reb*_*off 6

变量未初始化.

执行步骤1: Dim endColumn As Integeran的默认值为Integer0,因此此时endColumn = 0.

执行步骤2: startColumn + endColumn - 1由于步骤1中的endColumn = 0,因此这是使用的值.


tan*_*ius 6

规范指出,认为:

在执行任何变量初始值设定项之前,所有变量都初始化为其类型的默认值.