C#:ref和out的联系及区别

- 1 class Program
- 2 {
- 3 static void Main(string[] args)
- 4 {
- 5 Program pg = new Program();
- 6 int x = 10;
- 7 int y = 20;
- 8 pg.GetValue(ref x, ref y);
- 9 Console.WriteLine("x={0},y={1}", x, y);
- 10
- 11 Console.ReadLine();
- 12
- 13 }
- 14
- 15 public void GetValue(ref int x, ref int y)
- 16 {
- 17 x = 521;
- 18 y = 520;
- 19 }
- 20 }

:
代码②:

- 1 class Program
- 2 {
- 3 static void Main(string[] args)
- 4 {
- 5 Program pg = new Program();
- 6 int x = 10;
- 7 int y = 20;
- 8 pg.GetValue(ref x, ref y);
- 9 Console.WriteLine("x={0},y={1}", x, y);
- 10
- 11 Console.ReadLine();
- 12
- 13 }
- 14
- 15 public void GetValue(ref int x, ref int y)
- 16 {
- 17 x = 1000;
- 18 y = 1;
- 19 }
- 20 }

由代码① 和②的运行结果可以看出,在方法中对参数所做的任何更改都将反映在该变量中,而在main函数中对参数的赋值却没有起到作用,这是不是说明不需要进行初始化呢?来看第二点

- 1 class Program
- 2 {
- 3 static void Main(string[] args)
- 4 {
- 5 Program pg = new Program();
- 6 int x;
- 7 int y; //此处x,y没有进行初始化,则编译不通过。
- 8 pg.GetValue(ref x, ref y);
- 9 Console.WriteLine("x={0},y={1}", x, y);
- 10
- 11 Console.ReadLine();
- 12
- 13 }
- 14
- 15 public void GetValue(ref int x, ref int y)
- 16 {
- 17 x = 1000;
- 18 y = 1;
- 19 }
- 20 }

出现的错误为:使用了未赋值的局部变量“x”,“y”。故可以说明ref指定的参数无论在函数定义的时候有没有赋予初值,在使用的时候必须初始化。

- 1 class Program
- 2 {
- 3 static void Main(string[] args)
- 4 {
- 5 Program pg = new Program();
- 6 int x=10;
- 7 int y=233;
- 8 pg.Swap(out x, out y);
- 9 Console.WriteLine("x={0},y={1}", x, y);
- 10
- 11 Console.ReadLine();
- 12
- 13 }
- 14
- 15 public void Swap(out int a,out int b)
- 16 {
- 17
- 18 int temp = a; //a,b在函数内部没有赋初值,则出现错误。
- 19 a = b;
- 20 b = temp;
- 21 }
- 22
- 23 }

C#:ref和out的联系及区别的更多相关文章
- 方法的形参、ref参数、out参数的区别
我们在定义方法时,经常会涉及到传参.因为引用类型的数据在用变量存储时,是存储的地址,所以在传参时,依然是传递的地址,但是值类型的数据在传参时就会有所不同.值类型数据在调用方法传参时,普通情况下是值传递 ...
- ref和out的用法和区别。
关于ref和out的用法和区别在网上已经有很多的解释,这里只不过是写下对于我而说比较容易理解的解释. ref和out都可以用来在函数中返回数据,类似于c++中指针. 参数 Ref Out 是否一定需要 ...
- ref和out的使用与区别
out的使用 ————————————————————————————————————————————————— class Program { static void Main( ...
- ref和out的使用与区别【转】
http://www.cnblogs.com/sjrhero/articles/1922902.html out的使用 ———————————————————————————————————————— ...
- ref 和 out 的用法和区别以及params用法
方法参数可以划分为一下四种类型1 值参数:声明时不含任何修饰符2 引用参数:以ref修饰符声明3 输出参数:以out修饰符声明4 参数数组:以params修饰符声明 引用参数和输出参数不创建新的存储位 ...
- C#:ref关键字和out关键字的区别
1.在不使用关键字(比如ref关键字.out关键字等)修饰函数的情况下,大部分函数的参数是以值传递的方式,也就是说,“调用函数”在使用参数(比如myNumber)时,是把该参数复制多一份,然后将其传递 ...
- property中ref、value、name的区别
转载: 版权声明:本文为CSDN博主「qq_36098284」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明.原文链接:https://blog.csdn.net ...
- C#中ref和out的使用与区别
C#中ref关键字和out关键字所实现的功能差不多,都是指定一个形参按照引用传递而不是实参的副本传递.但是二者适用场景还是有些区别的:out适合用在需要retrun多个返回值的地方,而ref则适合用在 ...
- ref 和out的用法以及区别
在项目其实很少用ref和out,但是我们常用的工具resharep在帮我们重构的时候难免会给我们重构成带有ref或者是out的方法. 本人也是用的少所以难免忘记,留下简略笔记,以供后来自我参考: 为何 ...
随机推荐
- HTTP协议基础与实验
一. HTTP协议(Hypetext Transfer Protoacal,超文本传输协议) HTTP协议规定了Web基本的运作过程,以及Web服务器之间的通信细节. Http协议采用客户端/服务器端 ...
- 第七篇: python高级之多线程
21 interest=0.05 22 count=amount+amount*interest 23 24 self.withdraw(count) 25 26 27 def transfer(_f ...
- 使用js使表单自动提交
function sub(){ document.yeepay.submit(); } setTimeout(sub,1000);//以毫秒为单位的.1000代表一秒钟.根据你需要修改这个时间. // ...
- WisDom.Net 框架设计(三) 数据缓存
WisDom.Net --数据缓存 1.几种缓存方式 1.静态全局变量 C#静态变量使用 static 修饰符进行声明,在类被实例化时创建,通过类进行访问不带有 static 修饰符声明 ...
- C#使用Process类调用外部程序(转)
在程序开发中,一个程序经常需要去调用其他的程序,C#中Process类正好提供了这样的功能.它提供对本地和远程进程的访问并使您能够启动和停止本地系统进程.一.启动进程实例 Process myProc ...
- CI 笔记5 (CI3.0 默认控制器,多目录)
在ci3.x中,不支持多级子目录的默认控制器设置, 解决方法如下: 在index.php中,添加 $routing['directory'] = 'admin';然后在默认的router.php的默 ...
- mongo db安装和php,python插件安装
安装mongodb 1.下载,解压mongodb(下载解压目录为/opt) 在/opt目录下执行命令 wget fastdl.mongodb.org/linux/mongodb-linux-x86_6 ...
- java设计模式——单例(Singleton)模式
在某些场景,你需要找到一个承担职责的对象,并且这个对象是他所属类的唯一实例.此时可以使用单例模式. 单例模式的意图是为了确保一个类有且仅有一个实例,并为他提供一个全局的访问点.创建一个担当独一无二角色 ...
- C#遍历所有的Textbox控件并赋值为String.Empty
foreach (Control control in this.Controls) { if (control.GetType().Name.Equals("TextBox")) ...
- js获取屏幕(设备)宽高
平常获取设备的宽高无非就那几 <script language="javascript"> var h = ""; h += " 网页可见 ...