c#基础语言编程-按值类型和引用类型传递参数
来源:互联网 发布:mac版finale免费30天 编辑:程序博客网 时间:2024/06/06 09:47
引言
在介绍传递参数介绍前,请明白参数类型和传递方式是不同的。传递方式分为按值类型和引用类型传递参数。参数类型有值类型和引用类型,这个和C++是不同的。这里的传递方式对应c++中的深复制和浅复制。
两钟传递方式不同的标志为在调用函数中是否有ref,out这些标志,有的话,则为按引用传递,没有的话就是按值类型传递参数,根据参数类型的不同,可以分为按值传递值类型参数、按值传递引用类型、按引用传递值类型、按引用传递引用类型。
例子介绍
//按值传递值类型参数 private static void M1( int m) { m++; } //按值传递引用类型参数,也可以传递类对象、数组、接口、委托等等都是引用类型参数private static void M5( string name2) { name2 = "乔丹"; } // 如果类似在参数中添加ref关键词,则意味这是按引用传递参数,无论是值类型参数还是引用类型参数。//调用string name = "科比";M5(name);Console.WriteLine(name);//输出科比//如果改为:M5(ref name);//当然M5中参数前加关键词refConsole.WriteLine(name);//乔丹
上面中按传递值类型参数更容易理解。
机制解析
值传递,传递的是栈中的内容,(对于值类型,栈中的内容就是对应的数据。对于引用类型栈中内容就是对象的地址)。
引用传递,传递的是栈本身的地址,多个变量名实际上指向的是同一个栈变量。
引用传递必须使用ref关键字修饰。在方法调用的时候传递参数的时候也必须加ref 关键字。
按照上图解析,在调用时
1、确定传递类型
2、确定参数类型
3、调用操作
在按值类型传递时,则在堆栈中进行操作,首先在栈中申请内存区域,讲复制得到的值拷贝其中,如果是值类型参数,就将值拷贝到新申请的区域。如果是引用类型参数,将对象在栈中地址拷贝一份。因为数据是在堆中,类似在堆中的数据有了两个指针,操作那个指针,里面的数据都会变化。但是如果new个对象时,意味着那就是在堆中有新的对象,数据也会不一样。参照M5调用。
按引用传递时,则是将栈中地址进行拷贝,这就是深复制了。在函数调用时,传递的是栈中地址,意味着函数中操作就是对栈中地址中的数据进行操作了。所以在引用类型中,就是new个对象,意味着栈中地址指向改变,所以返回时,数据会有所改变。
0 0
- c#基础语言编程-按值类型和引用类型传递参数
- c#基础 值类型和引用类型
- 【C#基础】值类型和引用类型
- C#参数传递(值类型、引用类型)
- 传递引用类型参数(C# 编程指南)
- 传递引用类型参数(C# 编程指南)
- C#基础原理拾遗——引用类型的值传递和引用传递
- 引用类型参数的按值传递
- C# 类型基础 值类型和引用类型
- C#中 类和结构 值类型和引用类型以及 值传递和引用传递
- 关于C#的值类型和引用类型,值传递和引用传递的区别
- 关于C#值类型,引用类型,值传递,引用传递
- 关于C#值类型,引用类型,值传递,引用传递
- C#基础 栈和堆、值类型和引用类型
- C#值类型和引用类型用C语言理解
- 【c#基础】-值类型和引用类型详解
- 【C#基础】值类型&引用类型
- c# 参数传递类型
- 音视频同步原理
- go语言文件操作
- 设定div始终居中显示
- Python socket模块编程 SocketServer框架
- python中deque模块详解
- c#基础语言编程-按值类型和引用类型传递参数
- Java设计模式透析之 —— 组合(Composite)
- vsftpd 修改root账号不能登录 linux
- ContentProvider实现数据共享
- JQuery学习笔记(一)
- 记住了oracle数据库结构信息获取
- 面试题3 有序数组合并
- 在Linux/centos下查看网卡型号,如何查看主板型号,CPU/显卡信息,硬盘型号等硬件信息
- 常用的js小方法