首页后端开发ASP.NETC#引用类型: 按值传递,按引用传递的对比

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

时间2024-01-31 01:06:02发布访客分类ASP.NET浏览1095
导读:收集整理的这篇文章主要介绍了C#引用类型: 按值传递,按引用传递的对比,觉得挺不错的,现在分享给大家,也给大家做个参考。1,按值传递值按值传递,引用类型按值传递的实质的是传递值,参数为值类型时,“值”为实例本身,因此传递的是实例拷贝,不会对...
收集整理的这篇文章主要介绍了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 = GetcomponentSenderTest>
    ();
    //实例化类的对象        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#引用类型: 按值传递,按引用传递的对比的详细内容,更多请关注其它相关文章!

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!

上一篇: C++ 布尔类型和引用的用法详解下一篇:探索C++虚函数在g++中的实现(动...猜你在找的ASP.NET相关文章 C# 一些面试试题的实例教程2022-05-16.NET 6开发TodoList应用之请求日志组件HttpLogging介绍2022-04-16.NET 6中间件Http Logging使用介绍2022-04-16gojs一些实用的高级用法2022-04-16.NET6开发TodoList应用之实现查询排序2022-04-16.NET6开发TodoList应用之实现数据塑形2022-04-16.NET微服务架构CI/CD自动打包镜像2022-04-16Asp.Net Core 使用Monaco Editor 实现代码编辑器功能2022-04-16.NET微服务架构CI/CD自动构建Jenkins+Gitee2022-04-16.Net Core微服务网关Ocelot集成Consul2022-04-16 其他相关热搜词更多phpjavapython程序员loadpost-format-gallery

若转载请注明出处: C#引用类型: 按值传递,按引用传递的对比
本文地址: https://pptw.com/jishu/593278.html
node.js 显示乱码怎么办 基于汇编的 C/C++ 协程(用于服务器)的实现

游客 回复需填写必要信息