惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Martin Fowler
Martin Fowler
Blog — PlanetScale
Blog — PlanetScale
Vercel News
Vercel News
L
LangChain Blog
Google DeepMind News
Google DeepMind News
H
Hackread – Cybersecurity News, Data Breaches, AI and More
F
Fortinet All Blogs
The GitHub Blog
The GitHub Blog
Recent Announcements
Recent Announcements
D
DataBreaches.Net
云风的 BLOG
云风的 BLOG
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
A
About on SuperTechFans
博客园_首页
N
Netflix TechBlog - Medium
Y
Y Combinator Blog
Hugging Face - Blog
Hugging Face - Blog
Last Week in AI
Last Week in AI
酷 壳 – CoolShell
酷 壳 – CoolShell
B
Blog
Apple Machine Learning Research
Apple Machine Learning Research
罗磊的独立博客
美团技术团队
V
V2EX

博客园 - 妖居

ASP.NET MVC Tips #2 - 令人混乱的Get、Post、Return View和Return Redirect ASP.NET MVC Tips #1 - 支持上传文件的ModelBinder How to migrate MsSql database to MySql Windows Workflow Foundation 使用小例 使用异步委托解决Windows Application应用Duplex Service时出现的Deadlock问题 字节数组、数值和十六进制字符串的转换 表格化固定长、CSV文件编辑器工具 iMatrixitor 发布 Getting Started With LINQ in Visual Basic (翻译 + 评论) 使用接口实现附带插件功能的程序 两个简单方法加速DataGridView 使用.NET自带的功能制作简单的注册码 不是说“Peek 不会更改 StreamReader 的当前位置”么。MS骗人的! 《Introducing Visual Basic 2005》中看到的一些VB2005的新特性 Add-in and Automation Development In VB.NET 2003 (Finished) Add-in and Automation Development In VB.NET 2003 (8) 模拟IE地址栏的TextBox小控件 Add-in and Automation Development in VB.NET 2003 (6-7) 在WinXP环境下显示XP风格的控件 Add-in and Automation Development In VB.NET 2003 (5)
VB.NET函数的返回值问题(从CSDN论坛一个问题想到的)
妖居 · 2005-05-17 · via 博客园 - 妖居

今天上CSDN,看到讨论VB.NET关于函数返回值的问题。简单的说就是为什么我们在函数内部定义的变量,通过Return返回之后,调用端可以正常接收到这个值,而不会由于这个对象释放而无法得到。
我第一次做C程序的时候就遇到了相关的问题,我在函数里面定义的变量,当我通过return返回的时候,由于这个函数返回,使得所有函数内的局部变量都自动释放了,结果调用端得到的结果就是错误的。为了解决这个问题,我只能通过参数将返回值的指针或者引用传递进来才行。
但是回头我看VB.NET程序就没有这个限制了。比如下面的代码就没有问题。

按理来说,ret在return ret的时候就会被释放的,但是调用端却可以正常接收到这个变量的值。
为什么会出现这样的情况呢?我有下面两种猜测。
(1)由于.NET通过GC进行资源回收,是不是说明了函数返回的时候,函数内部的变量并没有立即回收他们的资源。而当调用端将这个返回值赋值在另一个变量的时候,这个内存块又被声明为“有用”的了。所以.NET就会一直保留着这个内存块。
(2)如果我们不用Return语句,我们也可以通过设定一个和函数同名的隐藏变量的方法来设定函数的返回值。这在VB6里面是经常用到的。那么问题是这个同名的变量究竟定义在哪里了呢?我怀疑他是被隐含定义在了函数的调用端了。也就是说,它的生命周期不是在函数内部,而是在函数外部。VB.NET虽然加入了Return,但是是不是他的作用就是“GetValue = ret”这一条语句?

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