簡體   English   中英

VB.NET執行順序

[英]VB.NET Execution Order

我目前正在努力將一些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方法更類似於將值存儲在臨時變量中:

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.NET中,您可以同時使用它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM