小白请教:关于ref、out

lanytin 2008-10-30 12:59:50
看别人的代码,selhelper类:
请问各位:为什么dataReader使用out,而dataset使用ref呢?
有什么特殊的目的吗?

  /// <summary>
/// 执行存储过程
/// </summary>
/// <param name="procName">存储过程的名称</param>
/// <param name="prams">存储过程所需参数</param>
/// <param name="dataSet">返回DataReader对象</param>
public void RunProc(string procName, SqlParameter[] prams, out SqlDataReader dataReader)
{
///创建Command
SqlCommand cmd = CreateProcCommand(procName, prams);

try
{
///读取数据
dataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
}
catch(Exception ex)
{
dataReader = null;
///记录错误日志
SystemError.CreateErrorLog(ex.Message);
}
}

/// <summary>
/// 执行存储过程
/// </summary>
/// <param name="procName">存储过程的名称</param>
/// <param name="dataSet">返回DataSet对象</param>
public void RunProc(string procName, ref DataSet dataSet)
{
if(dataSet == null)
{
dataSet = new DataSet();
}
///创建SqlDataAdapter
SqlDataAdapter da = CreateProcDataAdapter(procName,null);

try
{
///读取数据
da.Fill(dataSet);
}
catch(Exception ex)
{
///记录错误日志
SystemError.CreateErrorLog(ex.Message);
}
finally
{
///关闭数据库的连接
Close();
}
}
...全文
109 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
jialiguo 2008-11-06
  • 打赏
  • 举报
回复
这与delphi的var const是不是一样?
lanytin 2008-10-31
  • 打赏
  • 举报
回复
都不是我想要的。居然没有人回答。
哎……
结贴!
lanytin 2008-10-30
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 tonyze 的回复:]
你把哈希码地址打出来就知道了
用ref地址没变,out 地址改变
[/Quote]

有没有人解释的更清楚一点呢?
我想知道这种 变于不变 对asp.net程序本身有特别的意义吗?
因为同样可以不变,或者都变。
就好像饭可以吃,碗不能吃(大家解释的都是这个)。
饭可以给我们提供能量,但碗我们不能消化。
后面的这句才是我想知道的。
tonyze 2008-10-30
  • 打赏
  • 举报
回复
你把哈希码地址打出来就知道了
用ref地址没变,out 地址改变
lanytin 2008-10-30
  • 打赏
  • 举报
回复
现在知道rel是有进有出,out是只出不进。
能不能结合那两个方法,说一下dataReader使用out,而dataset使用ref,
在DAL层使用时,带来的好处吗?
lfzpf 2008-10-30
  • 打赏
  • 举报
回复
ref(C# 参考)

ref 关键字使参数按引用传递。其效果是,当控制权传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。若要使用 ref 参数,则方法定义和调用方法都必须显式使用 ref 关键字。例如:

class RefExample
{
static void Method(ref int i)
{
i = 44;
}
static void Main()
{
int val = 0;
Method(ref val);
// val is now 44
}
}


out(C# 参考)

out 关键字会导致参数通过引用来传递。这与 ref 关键字类似,不同之处在于 ref 要求变量必须在传递之前进行初始化。若要使用 out 参数,方法定义和调用方法都必须显式使用 out 关键字。例如:

class OutExample
{
static void Method(out int i)
{
i = 44;
}
static void Main()
{
int value;
Method(out value);
// value is now 44
}
}
zhiaini 2008-10-30
  • 打赏
  • 举报
回复
学习
wuyq11 2008-10-30
  • 打赏
  • 举报
回复
ref是传递参数的地址,out是返回值
使用ref前必须对变量赋值,out不用。
ref是传入值,out是传出值
xyhuanwell 2008-10-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 xuelazhade 的回复:]
rel是有进有出,out是只出不进。
[/Quote]
同意楼上意见
扎德 2008-10-30
  • 打赏
  • 举报
回复
rel是有进有出,out是只出不进。