VB.NET函数的返回值问题(从CSDN论坛一个问题想到的)

今天上CSDN,看到讨论VB.NET关于函数返回值的问题。简单的说就是为什么我们在函数内部定义的变量,通过Return返回之后,调用端可以正常接收到这个值,而不会由于这个对象释放而无法得到。
我第一次做C程序的时候就遇到了相关的问题,我在函数里面定义的变量,当我通过return返回的时候,由于这个函数返回,使得所有函数内的局部变量都自动释放了,结果调用端得到的结果就是错误的。为了解决这个问题,我只能通过参数将返回值的指针或者引用传递进来才行。
但是回头我看VB.NET程序就没有这个限制了。比如下面的代码就没有问题。
ExpandedBlockStart.gif ContractedBlock.gif private   Function GetValue() function GetValue(code as stringas string
InBlock.gif  
dim ret as string
InBlock.gif  
if code = "1" then
InBlock.gif    ret 
= "value 1"
InBlock.gif
  else
InBlock.gif    ret 
= "null"
InBlock.gif
  end if
InBlock.gif  
return ret
InBlock.gif
end Function
按理来说,ret在return ret的时候就会被释放的,但是调用端却可以正常接收到这个变量的值。
为什么会出现这样的情况呢?我有下面两种猜测。
(1)由于.NET通过GC进行资源回收,是不是说明了函数返回的时候,函数内部的变量并没有立即回收他们的资源。而当调用端将这个返回值赋值在另一个变量的时候,这个内存块又被声明为“有用”的了。所以.NET就会一直保留着这个内存块。
(2)如果我们不用Return语句,我们也可以通过设定一个和函数同名的隐藏变量的方法来设定函数的返回值。这在VB6里面是经常用到的。那么问题是这个同名的变量究竟定义在哪里了呢?我怀疑他是被隐含定义在了函数的调用端了。也就是说,它的生命周期不是在函数内部,而是在函数外部。VB.NET虽然加入了Return,但是是不是他的作用就是“GetValue = ret”这一条语句?

以上只是我个人一些想法,如果您知道答案,还请不吝赐教。

转载于:https://www.cnblogs.com/farrio/archive/2005/05/17/157032.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值