VB.NET执行命令

本文关键字:命令 执行 NET VB | 更新日期: 2023-09-27 18:09:47

我目前正在将一些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#的理解,这个方法的第一行会立即返回到调用方法,整个方法基本上就像一个伪属性。

有什么有用的解释吗?

VB.NET执行命令

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

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

在VB的function = value语法不做一个return -所以代码之后可以继续运行。当该方法结束时,您使用的值将成为最初调用它的对象的"返回"值。

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

根据我对c#的理解,这个方法的第一行会立即返回到调用方法

但这不是c#代码,这是VB代码。AllocateObjectNumber = _nextFreeObjectNumber返回,它只是分配一个返回值。实际的返回值在方法的末尾。

大多数人实际上会编写与c#代码相同的VB代码,即显式地使用Return。assign-to-method-name样式是旧VB版本的残余,在旧版本中,它是从函数返回值的惟一方式。在VB。