重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
C返回局部变量的值也没问题啊
成都创新互联主要从事成都网站设计、网站建设、网页设计、企业做网站、公司建网站等业务。立足成都服务丹凤,10余年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:028-86922220
只是如果这个局部变量是指向栈上的内存的指针,由于函数结束后活动栈被清空,会导致指针失效。
VB.NET不支持指针语法,它不可能返回指向栈上的指针,所以用不着担心这个问题。
你的理解
第一点理解是正确的,不过和这个问题关系不大。因为引用类型本来就不是分配在栈上的,它当然就不受函数的影响。
第二点,那个只是个语法问题。VB6没有Return语句,所以它必然有另外一种语法来表明函数的返回值。这个和函数能否返回正确的对象没有关系,就是一种表明函数返回值的语法。
编译器确实定义了一个和函数同名的变量,那个变量就是一个普通的局部变量,作用域就在函数的局部域里。这个变量没什么特别的,就是编译器会在函数结束时把这个变量的值作为函数的返回值返回而已。
.Net的所有类型都是从System.Object派生而来的,所以将函数直接定义成
Function Prior() As Object 即可
不过在返回之后,调用此函数的代码要注意验证返回值的有效性
一个比较简单的方法是返回DataTable,代码如下:
public Boolean SearchBySQL(string SQL, DataTable myData)
{
SqlConnection myConn = new SqlConnection(ConfigurationSettings.AppSettings["ConnectionString"]);
try
{
myConn.Open();
try
{
SqlCommand myComm = new SqlCommand(SQL, myConn);
SqlDataAdapter mySDA = new SqlDataAdapter();
mySDA.SelectCommand = myComm;
mySDA.Fill(myData);
return true;
}
catch (Exception ex)
{
return false;
}
}
catch (Exception ex)
{
return false;
}
finally
{
if (myConn.State == ConnectionState.Open)
{
myConn.Close();
}
}
}
其中ConnectionString是Web.config里的连接字符串
还有一种方法是写存储过程返回所需参数
1、我有一个function,如下:
function b()
'...
return "abc"
end function
2、调用时,这样子用:
Response.write(b());
3、运行结果:
abc
你的 sub过程这个是子过程,无返回值的,这里Form1_Load中b仍然 b=""
如果你想b="注释",将你的sub过程改成自定义函数,用b来接收返回值就行了,代码如下
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim a As String = "rem"
Dim b As String = ""
b = sub过程(b, a)
Me.Text = b '为什么“b”不是等于 "注释"
End Sub
Private Function sub过程(ByVal 输出 As String, ByRef 输入 As String) As String
If 输入 = "rem" Then
输出 = "注释"
End If
Return 输出
End Function