1,按值传递

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

2,按引用传递
按引用传递之ref和out,不管是值类型还是引用类型,按引用传递必须以ref或者out关键字来修饰,ref要求传递之前的参数必须首先显示初始化,而out不需要。也就是说,使用ref的参数必须是一个实际的对象,而不能指向null;而使用out的参数可以接受指向null的对象,然后在调用方法内部必须完成对象的实体化。

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

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

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# 数据类型

更多相关文章

  1. C++ 布尔类型和引用的用法详解
  2. 第二章C++:变量和基本类型
  3. C#如何使用Reflect获取dll文件中的类型并调用?
  4. C#中的数据类型是什么?C#中的四种数据类型解释
  5. c语言简单数据类型有哪些
  6. 在C++中对象如何作为参数传递和返回?(代码示例)
  7. c语言属于什么类型的编程语言
  8. char是什么数据类型
  9. c++类型转换

随机推荐

  1. 大家好我刚来到请多帮助呀
  2. Python入门:函数加括号和不加括号的区别
  3. 与kubectl exec运行后台进程
  4. 人工智能和机器学习领域开源项目
  5. python练习_购物车(2)
  6. Python 爬取CSDN博客频道
  7. 谈网页游戏外挂之用python模拟游戏(热血
  8. 使用芹菜接收未注册的任务
  9. 【Python截图】截图处理
  10. 自学Python九 爬虫实战二(美图福利)