C#引用类型: 按值传递,按引用传递的对比

互联网 18-8-4
1,按值传递

值按值传递,引用类型按值传递的实质的是传递值,参数为值类型时,“值”为实例本身,因此传递的是实例拷贝,不会对原来的实例产生影响;参数为引用类型时,“值”为对象引用,因此传递的是引用地址拷贝,会改变原来对象的引用指向。string是引用类型,string按值传递的效果与值类型按值传递效果一样,string在这里比较特殊。调用方法发生参数传递时,方法根据参数类型先在stack创建一个变量,然后将参数的值赋值给该变量。所以,值类型与string类型传递实例不变,引用类型传递地址改变。但如果是按引用传递,则都是传递地址,实例的值都会发生改变。

值类型按引用传递时,不会对值类型装箱。

按引用传递,传递的不是参数本身的值,而是参数的地址。如果参数为值类型,则传递的是该值类型的地址;如果参数为引用类型,则传递的是对象引用的地址,引用类型按引用传递结果和按值按引用传递一样。

int i = 100;//Ref需要显示初始化 int j;//out不需要显示初始化 Fun(ref i,out j); void Fun(ref int i,out int j)     {         j = 100;//out必须完成对象的实体化     }

如下:

private void Awake()     {         SenderTest st = GetComponent<SenderTest>();//实例化类的对象         st.i = 100;         int i = 100;         string s = "100";         ChangeValue(i,s, st);//值类型,引用类型,按值传递         print("value "+i+s+st.i);//value 100 100 200         ChangeValue(ref i, ref s, ref st);//值类型,引用类型,按引用传递         print("ref "+i + s + st.i);//ref 200 200 200     }     void ChangeValue(int i, string s, SenderTest st)     {         i = 200;         s = "200";         st.i = 200;     }     void ChangeValue(ref int i, ref string s, ref SenderTest st)     {         i = 200;         s = "200";         st.i = 200;     }

相关文章:

使用C/C++编写PHP Extension

【c#教程】C# 数据类型

以上就是C#引用类型: 按值传递,按引用传递的对比的详细内容,更多内容请关注技术你好其它相关文章!

来源链接:
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
上一篇:php获取远程图片并下载保存到本地的方法分析 下一篇:探索C++虚函数在g++中的实现(动多态)_虚函数表剖析

相关资讯