+ -
当前位置:首页 → 问答吧 → "按引用传递值类型"是什么意思啊

"按引用传递值类型"是什么意思啊

时间:2011-12-26

来源:互联网

"按引用传递值类型"是什么意思啊

作者: yanchengcs   发布时间: 2011-12-26

就是按地址传参,同值传递方式相对。

方法内内参数的改变,会引起方法外实参的改变。

作者: dalmeeme   发布时间: 2011-12-26

写个代码看看啊

作者: yanchengcs   发布时间: 2011-12-26

C# code
    protected void Page_Load(object sender, EventArgs e)
    {
        int[] n = new int[] { 1, 2, 3 };
        ChangValue(n);
        Response.Write(n[1]);
    }

    private void ChangValue(int[] n)
    {
        n[1] = 10000;
    }

作者: dalmeeme   发布时间: 2011-12-26

ref/out 关键字

public void SetValue(ref int x)
{
  x = 0;
}

int x = 1;
SetValue(ref x);
Console.WriteLine(x);

作者: fangxinggood   发布时间: 2011-12-26

可以看到,ChangValue内改变形参的值,实参也会随之改变。

作者: dalmeeme   发布时间: 2011-12-26

string aa = "aa";
string bb = "bb";

Test(aa,bb);

//此时 ,aa = "123" ,bb = "456"

private boolean Test(ref string parameter1,ref string parameter2)
{
 parameter1 = "123";
 parameter2 = "456"
 return true;
}


parameter1和parameter2是传进来的参数 ,不管parameter1和parameter2变成啥,调用这方法的地方,这2个数都跟着变 。

作者: accomp   发布时间: 2011-12-26

[Quote=引用 5 楼 dalmeeme 的回复:

可以看到,ChangValue内改变形参的值,实参也会随之改变。
[/Quote]

呵呵,其实你举的例子正相反:按值传递引用类型

作者: fangxinggood   发布时间: 2011-12-26

3楼的例子是错误的,4、6楼才是“按引用传递值类型”...在.NET中除非加ref或out关键字,否则无论什么类型都是“按值传递”的...

作者: vrhero   发布时间: 2011-12-26

这也是个经久不衰的月经问题...最可悲地是很多号称有多年经验的都还迷糊着,因为他们从来不去看MSDN的.NET基础概念...

作者: vrhero   发布时间: 2011-12-26

引用 8 楼 vrhero 的回复:

3楼的例子是错误的,4、6楼才是“按引用传递值类型”...在.NET中除非加ref或out关键字,否则无论什么类型都是“按值传递”的...


.NET中有引用类型和值类型之分,引用类型传递时,不用加ref,只有值类型传递时才需要加ref。

作者: zjmotion   发布时间: 2011-12-26