VB.NET函数返回

use*_*612 25 vb.net return function

为了从VB.NET函数返回值,可以为"函数名称"赋值或使用"返回值".

我有时会在相同的功能中看到这些混合.就个人而言,我更喜欢回归.

我的问题是,两者之间的内部差异是什么?

小智 52

不同之处在于他们做了不同的事情!

'返回值'有两件事:
1.它设置该点的函数返回值2.它立即退出函数

函数中没有其他代码执行!

'Functionname = value'做了一件事:1.它设置该点的函数返回值

函数中的其他代码继续执行.这使得其他逻辑可以优化或覆盖函数返回值

巨大的差异人群.记住,这不仅仅与国家有关,也与流动有关.

  • 他实际上问过"我的问题是,两者之间的内部差异是什么? (4认同)

TGn*_*nat 17

我们来看看......奇怪的是,"functionName ="会产生更少的IL?

码:

Public Function Test() As String
    Test = "Test"
End Function


Public Function Test2() As String
    Return "Test"
End Function
Run Code Online (Sandbox Code Playgroud)

IL:

.method public static string Test() cil managed
{
    .maxstack 1
    .locals init (
        [0] string Test)
    L_0000: nop 
    L_0001: ldstr "Test"
    L_0006: stloc.0 
    L_0007: ldloc.0 
    L_0008: ret 
}

.method public static string Test2() cil managed
{
    .maxstack 1
    .locals init (
        [0] string Test2)
    L_0000: nop 
    L_0001: ldstr "Test"
    L_0006: stloc.0 
    L_0007: br.s L_0009
    L_0009: ldloc.0 
    L_000a: ret 
}
Run Code Online (Sandbox Code Playgroud)

  • 应该注意,这只是在调试模式下(因此,无关紧要)!在发布模式下,生成相同的代码. (12认同)
  • 返回与C#兼容,对于更多程序员来说更具可读性,听起来更好 (2认同)

Sti*_*ack 14

可能没什么区别.IIRC,编译器生成的IL将它们都转换为Return语句,除非有额外使用_returnValue变量.

在我看来,FunctionName赋值的可读性很差,并且是一个糟糕的VB6习惯的例子.我也更喜欢_returnValue(NOT RETVAL)变量方法.

  • 下面的答案是一个更好的答案 (6认同)
  • @Jonathan - 关于SO问题的答案并不总是以相同的方式排序.你可以链接到帖子吗? (2认同)
  • @StingyJack - 是的,我确定.IL在_trivial examples_中仅相同,并且仅在发布模式下.将执行函数中跟随FunctionName赋值的任何代码,并且函数中跟随Return函数的任何代码都不会执行.这是一个巨大的行为差异,如果后面还有一行代码,那么在发布和调试模式下,IL总是表现为差异.它与两个问题之间的问题高度相关,"两者之间的内部差异是什么?" (2认同)

Tom*_*son 6

仅为Visual Basic 6.0开发人员提供以下功能,以便轻松地将代码移植到:

Public Function MyFunction() As String
    MyFunction = "Hello"
End Function
Run Code Online (Sandbox Code Playgroud)

如果您的项目包括未使用过Visual Basic 6.0的任何人,我绝对不建议继续这样做,因为这种语法会令人困惑.