博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#在代码中演示值传递和引用传递的含义,区别
阅读量:6436 次
发布时间:2019-06-23

本文共 3082 字,大约阅读时间需要 10 分钟。

  hot3.png

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace _02值传递与引用传递{    class Program    {        static void Main()        {            Console.WriteLine("*****传递分四种情况:1、分别是值传递值类型,2、引用传递值类型,3、值传递引用类型,4、引用传递引用类型");            Console.WriteLine("***************");            Console.WriteLine("1、值传递值类型,");            int n = 5;            Console.WriteLine("调用值传递值前的n值: {0}", n);            ZhiChuanzhi(n);            Console.WriteLine("调用值传递值之后n值发生改变: {0}", n);            Console.WriteLine("变量 n 为值类型,包含其数据(值为 5)。当调用 ZhiChuanzhi 时,n 的内容被复制到参数 x 中,在方法内将该参数求平方。但在 Main 中,n 的值在调用 ZhiChuanzhi 方法前后是相同的。实际上,方法内发生的更改只影响局部变量 x。");            Console.WriteLine("***************");            Console.WriteLine("2、引用传递值类型,");            YinyChuanzhi(ref n);            System.Console.WriteLine("调用引用传递值之后n值发生改变: {0}", n);            Console.WriteLine("本示例中,传递的不是 n 的值,而是对 n 的引用。参数 x 不是 int 类型,它是对 int n 的引用。因此,当在方法内对 x 求平方时,实际被求平方的是 x 所引用的项:n。");            Console.WriteLine("***************");            Console.WriteLine("3、值传递引用类型,");            int[] arr = { 1, 4, 5 };            Console.WriteLine("在 Main 内, 调用该方法的前第一个元素是: {0}", arr[0]);            Change(arr);            Console.WriteLine("在 Main 内, 调用该方法后的第一个元素是: {0}", arr[0]);            Console.WriteLine("在上个示例中,数组 arr 为引用类型,在未使用 ref 参数的情况下传递给方法。在此情况下,将向方法传递指向 arr 的引用的一个副本。输出显示方法有可能更改数组元素的内容,在这种情况下,从 1改为 888。但是,在 Change 方法内使用 new 运算符来分配新的内存部分,将使变量 pArray 引用新的数组。因此,这之后的任何更改都不会影响原始数组 arr(它是在 Main 内创建的)。实际上,本示例中创建了两个数组,一个在 Main 内,一个在 Change 方法内。");            Console.WriteLine("***************");            Console.WriteLine("4、引用传递引用类型");            int[] arra = { 1, 4, 5 };            System.Console.WriteLine("在 Main 内, 调用该方法的之前第一个元素是: {0}", arr[0]);            Changeto(ref arra);            System.Console.WriteLine("在 Main 内, 调用该方法的之后第一个元素是: {0}", arr[0]);            Console.WriteLine("方法内发生的所有更改都影响 Main 中的原始数组。实际上,使用 new 运算符对原始数组进行了重新分配。因此,调用 Change 方法后,对 arr 的任何引用都将指向 Changeto 方法中创建的五个元素的数组。");            Console.ReadKey();        }        // 该参数的值是通过值传递的。        // 更改不会影响x的原始值        static void ZhiChuanzhi(int x)                {            x *= x;            Console.WriteLine("在值传递传值方法的内部X进行自乘的结果: {0}", x);        }        // 该参数的值是通过引用传递值的。        // 更改不会影响x的原始值        static void YinyChuanzhi(ref int x)                {            x *= x;            Console.WriteLine("在引用传递传值方法的内部X进行自乘的结果: {0}", x);        }        //值传递引用类型        static void Change(int[] pArray)        {            pArray[0] = 888;  // 此项更改会影响原始值            pArray = new int[5] { -3, -1, -2, -3, -4 };   // 这个更改是局部的.            Console.WriteLine("在方法内部的第一个元素是: {0}", pArray[0]);        }        static void Changeto(ref int[] pArray)        {            // Both of the following changes will affect the original variables:            pArray[0] = 888;            pArray = new int[5] { -3, -1, -2, -3, -4 };            System.Console.WriteLine("Inside the method, the first element is: {0}", pArray[0]);        }    }}

转载于:https://my.oschina.net/qau/blog/506064

你可能感兴趣的文章
C# 视频监控系列(14):总结贴——VC++代码转成C#小结
查看>>
undefined与null的区别
查看>>
Android特效专辑(十二)——仿支付宝咻一咻功能实现波纹扩散特效,精细小巧的View...
查看>>
数据挖掘中的概念描述
查看>>
struts2 依赖注入boolean类型的属性时报错
查看>>
应用生命周期终极 DevOps 工具包
查看>>
RUBY的类封装,继承,多态简单演示
查看>>
(iOS开发总结)MVC模式
查看>>
python sys.argv[]用法
查看>>
切割nginx日志
查看>>
LDAP常用命令解析
查看>>
Cobbler体验小记
查看>>
storm详解
查看>>
[MySQL 优化] 移除多余的checksum
查看>>
JS中的“!!”
查看>>
浅说《测试用例》----给测试新手的
查看>>
GridView实战二:使用ObjectDataSource数据源控件(自定义缓存机制实现Sort)
查看>>
网站安装打包 软件环境检测与安装[二] 下
查看>>
WWDC 2013 Session笔记 - iOS7中的多任务
查看>>
android被逼学习布局管理器
查看>>