博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[转] c# 的传递参数值传递与传递引用的区别,ref与out区别
阅读量:6973 次
发布时间:2019-06-27

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

 值传递 

 C#默认都是值传递的,就是复制变量的一个副本传递给方法,所以在退出方法后,对变量的修改无效。

但是要注意,当传递是引用类型时,因为引用类型是一个引用的地址,所以修改引用地址指向的对象时,一样会修改对象的值,这种现象不能当做引用传递

 引用传递

 引用传递是对象本身传递给方法,当在方法中对对象做修改时,退出方法后修改是有效的,在C#中引用传递需要在参数类型前加关键字 ref ,但是ref 的参数变量在使用前必须被初使化,可有时通过引用传递的变量初值是没意义的,这容易产生混淆,这时在C#中有另一关键字 out ,out 与 ref 关键字使用时效果一样,但是out关键字对变量可以不初使化,但是out关键字的变量在方法中必须给分配一个值,否则编译会不通过。

class Program    {        static void Main(string[] args)        {            var v = new Values();            int i = 10;            int j;            Console.WriteLine(v.a);            Method.Update(v, ref i, out j);            Console.WriteLine(string.Format("v.a={0}", v.a));            Console.WriteLine(string.Format("i={0}", i));            Console.WriteLine(string.Format("j={0}", j));            Console.ReadKey();        }    }    public class Values    {        public int a = 10;    }    public class Method    {        public static void Update(Values v, ref int i, out int j)        {            v.a = 20;            i = 20;            j = 20;        }    }

 输出值:10

v.a= 20

i=20

j=20

 

转载地址:http://wwrsl.baihongyu.com/

你可能感兴趣的文章
学习python第一天内容回顾
查看>>
原码,补码表示
查看>>
(最长上升子序列 并记录过程)FatMouse's Speed -- hdu -- 1160
查看>>
面面观 | CentOS install etcd 测试
查看>>
[CF566A]Matching Names
查看>>
[Oracle]ORA-01461: can bind a LONG value only for insert into a LONG column
查看>>
Linux学习之CentOS(三十三)--DNS基础及域名系统架构
查看>>
算法整理
查看>>
作业(二)
查看>>
计数排序
查看>>
nginx 和 php超时设置
查看>>
[复变函数]第03堂课 1.2 复平面上的点集
查看>>
Servlet学习之web服务器Tomcat 详解
查看>>
Python:Opening Python Classes
查看>>
mvc:view-controller
查看>>
Android推送分析
查看>>
HDU 3336 Count the string 查找匹配字符串
查看>>
ExpandoObject对象的JSON序列化
查看>>
微信公众平台开发者文档
查看>>
c# 反射取其他项目的资源文件
查看>>