这篇文章给大家分享的是有关C#引用类型之按值传递,按引用传递的对比示例的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
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#引用类型之按值传递,按引用传递的对比示例”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
分享标题:C#引用类型之按值传递,按引用传递的对比示例-创新互联
本文路径:https://www.cdcxhl.com/article4/djdsoe.html
成都网站建设公司_创新互联,为您提供响应式网站、搜索引擎优化、企业建站、App设计、自适应网站、商城网站
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联