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

时间:2010-04-16 15:18:21

标签: vb.net recursion initialization default-value

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

Dim endColumn As Integer = startColumn + endColumn - 1

实际上代码应该是:

Dim endColumn As Integer = startColumn + numColumns - 1

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

3 个答案:

答案 0 :(得分:6)

变量未初始化。

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

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

答案 1 :(得分:6)

spec说:

  

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

答案 2 :(得分:-1)

这里根本没有递归。读取变量永远不会导致递归。在最坏的情况下,我可以看到编译器在尝试在其初始化子句中使用变量时抛出错误,但显然它没有,或者你不能在第一种情况下编译。