假设我有以下代码片段,即goo call foo,goo和foo创建的DataTable只会调用Rows.Add。然后goo将使用来自foo的DataTable实例的更新数据。
我的问题是,在我的场景中,与使用和不使用ref参数进行比较的任何差异或好处?
我使用的是C#+ .Net 3.5 + VSTS2008。
void foo (ref DataTable dt)
{
// call Row.Add on dt
}
void goo()
{
DataTable dt1 = ...; // create a new instance of DataTable here
foo (ref dt1);
// read updated content of DataTable by foo here
}
答案 0 :(得分:4)
如果您打算更改dt
指向的内容,则只能使用ref
。例如,如果您想用不同的 DataTable
(或从DataTable
派生的类型)替换它。
在这种情况下,您只是使用 dt
,因此没有理由使用ref
。由于DataTable
是一个类,因此到所做的任何更改都将在foo
之外显示。
答案 1 :(得分:3)
除非您打算获取其他对象,否则不需要ref参数。 DataTable是一个引用对象,因此您实际传递的是指向指针的指针。如果你打算让被调用的函数对你的实例进行更改,你就不需要参考。
答案 2 :(得分:2)
在这种情况下,使用ref或非ref参数之间绝对没有区别。在这种情况下,ref param允许你做的唯一事情是“dt = new DataTable()”并且它会影响主函数。
最好只在需要时使用ref参数,否则会产生更加混乱的代码。
答案 3 :(得分:0)
我看到的唯一区别/好处是,如果您没有通过引用传递代码,代码会更清晰。
答案 4 :(得分:0)
其他人已经回答,但如果您想了解更多信息,可能需要阅读article on parameter passing in C#。
(每个人都是对的 - 如果你只是想改变对象中的数据,你可以通过值传递参数。如果你想改变调用者变量引用的对象,那么然后你通过引用传递。)