[英]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.