加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

vb.net – 函数的默认返回变量是否总是被分配?

发布时间:2020-12-17 07:20:48 所属栏目:百科 来源:网络整理
导读:我对如何实现名称与函数相同的默认变量感兴趣. 即使我不使用Sum,总是会分配吗? (见案例1) 如果我选择另一个变量(CASE 3中的总数),是否使用而不是Sum? 编译时,以下3个等效案例是否也相同?还是有些优于其他人? ' EQUIVALENT CASES' CASE 1Function Sum(a A
我对如何实现名称与函数相同的默认变量感兴趣.

>即使我不使用Sum,总是会分配吗? (见案例1)
>如果我选择另一个变量(CASE 3中的总数),是否使用而不是Sum?

编译时,以下3个等效案例是否也相同?还是有些优于其他人?

' EQUIVALENT CASES

' CASE 1
Function Sum(a As Integer,b As Integer) As Integer
    Return a + b
End Function

' CASE 2
Function Sum(a As Integer,b As Integer) As Integer
    Sum = a + b
End Function

' CASE 3
Function Sum(a As Integer,b As Integer) As Integer
    Dim Total As Integer
    Total = a + b
    Return Total
End Function

当我在某处读到时,内联插入编译为小于32字节的函数.我想知道在某些情况下,我是否可能因为选择的符号而高于或低于限制.

解决方法

我将你的函数分别重命名为Sum1,Sum2和Sum3,然后通过LinqPad运行它们.这是生成的IL:

Sum1:
IL_0000:  ldarg.1     
IL_0001:  ldarg.2     
IL_0002:  add.ovf     
IL_0003:  ret         

Sum2:
IL_0000:  ldarg.1     
IL_0001:  ldarg.2     
IL_0002:  add.ovf     
IL_0003:  stloc.0     // Sum2
IL_0004:  ldloc.0     // Sum2
IL_0005:  ret         

Sum3:
IL_0000:  ldarg.1     
IL_0001:  ldarg.2     
IL_0002:  add.ovf     
IL_0003:  stloc.1     // Total
IL_0004:  ldloc.1     // Total
IL_0005:  ret

似乎Sum2和Sum3导致相同的IL. Sum1似乎更有效,因为它将运算符的结果直接放到堆栈上.其他人必须将结果从堆栈中拉入局部变量,然后将其推回堆栈!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读