VB.NET执行顺序

时间:2013-04-18 15:12:35

标签: c# .net vb.net return

我目前正致力于将一些VB源代码转换为C#。虽然我知道有一些转换器可以实现自动化,并且我可以实际使用这个特殊的dll而无需重写它,我正在部分地这样做,所以我可以更好地理解VB。并不是期望写它,但它至少帮助我能够阅读它。

在这样做的过程中,我遇到了令人困惑的事情。以下代码片段是示例,但我在整个程序中都看到了它。

VB源代码:

Friend Function AllocateObjectNumber() As Long
    AllocateObjectNumber = _nextFreeObjectNumber
    _nextFreeObjectNumber += 1
    _objectAllocatedCount += 1
End Function

我的翻译C#代码:

    internal long AllocateObjectNumber()
    {
        cvNextFreeObjectNumber += 1;
        cvObjectAllocatedCount += 1;
        return cvNextFreeObjectNumber;
    }

我不理解的是VB使用的流控制。我理解AllocateObjectNumber += 1代替return cvNextFreeObjectNumber,但是如果这一行在两个变量递增之前出现,那么该代码怎么不被视为无法访问?根据我对C#的理解,这个方法的第一行会立即返回到调用方法,整个方法基本上就是伪属性。

有用的解释吗?

2 个答案:

答案 0 :(得分:8)

VB方法更类似于将值存储在临时变量中:

internal long AllocateObjectNumber()
{
    var nextNumber = _nextFreeObjectNumber
    cvNextFreeObjectNumber += 1;
    cvObjectAllocatedCount += 1;
    return nextNumber;
}

在VB中,function = value语法不执行return - 因此后面的代码可以继续运行。当该方法到达结尾时,您使用的值将成为首先调用它的“返回”值。

您可以在同一方法中多次使用function = value语法,作为在不同条件下返回不同结果的方法,而不需要我在我的示例中使用的临时变量。

答案 1 :(得分:4)

  

根据我的C#理解,此方法的第一行将立即返回到调用方法

但它不是C#代码,而是VB代码。 AllocateObjectNumber = _nextFreeObjectNumber 返回,它只是分配一个返回值。实际的回报是在方法的最后。

大多数人实际上会编写与C#代码相同的VB代码,即明确使用Return。 assign-to-method-name样式是较旧的VB版本的残余,它是唯一方式从函数返回值。在VB.NET中,您可以同时使用它们。