博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ref和out的区别在c#中 总结
阅读量:6677 次
发布时间:2019-06-25

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

 ref 关键字使参数按引用传递。其效果是,当控制权传递回调用方法时,在方法中对参数所做的任何更改都将反映在该中。简单点说就是,使用了ref和的效果就几乎和C中使用了一样。它能够让你直接对原数进行操作,而不是对那个原数的Copy进行操作。 还是以例子来说明吧; 1. ref: int i =0; 有函数fun(ref i)和fun(i) 它们的函数体都是{ i = 3;},那么在执行以下两段代码后: (1)int i = 0; fun(i); System.Console.WriteLine(i.ToString()); (2)int i = 0; fun(ref i); System.Console.WriteLine(i.ToString()); (1)的输出是1,(2)的输出是3, 2. out: int i; //注意,这里只是声明了变量i,并没有对其初始化 有函数fun(ref i)、fun(out i)和fun(i) 它们的函数体都是{ i = 3;},那么在执行以下三段代码后: (1)int i = 0; fun(i); System.Console.WriteLine(i.ToString()); (2)int i = 0; fun(ref i); System.Console.WriteLine(i.ToString()); (3)int i = 0; fun(out i); System.Console.WriteLine(i.ToString()); (1)和(2)在编译的时候都会报错:错误 CS0165: 使用了未赋值的局部变量“i” 而(3)能正常编译,而且输出3 最后总结一下: Ref和Out这两个关键字都能够提供相似的功效,其作用也很像C中的指针变量。稍有不同之处是: 使用Ref型参数时,传入的参数必须先被初始化。而Out则不需要,对Out而言,就必须在方法中对其完成初始化。 使用Ref和Out时都必须注意,在方法的参数和执行方法时,都要加Ref或Out关键字。以满足匹配。 Out更适合用在需要Return多个返回值的地方,而Ref则用在需要被调用的方法修改调用者的引用的时候。 列举一个例子
using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;namespace Test.OutAndRef{    public partial class Test : System.Web.UI.Page    {        protected void Page_Load(object sender, EventArgs e)        {            int i1 = 0;            int i11= fun1(i1);            System.Console.WriteLine(i1.ToString() + fun1(i1));            int i2 = 0;             int i22 = fun2(ref i2);             System.Console.WriteLine(i2.ToString() + fun2(ref i2));            int i3;             int i33 = fun3(out i3);             System.Console.WriteLine(i3.ToString() + fun3(out i3));        }        public int fun1(int num)        {            num = 3;            return ++num;        }        public int fun2(ref int num)        {            num = 3;            return num++;        }        public int fun3(out int num)        {            num = 3;            return num++;        }    }}

 

 

转载于:https://www.cnblogs.com/xiaoXuZhi/p/3223365.html

你可能感兴趣的文章
Webpack3简单入门2
查看>>
Springmvc+mybatis+restful+bootstrap框架整合
查看>>
ubuntu下rsync服务器端和客户端的配置
查看>>
UNIX/Linux 系统管理技术手册阅读(八)
查看>>
LINUX 软件安装。
查看>>
linux 批量文件重命名
查看>>
javascript使用xml 数据岛 简单实例
查看>>
Ubuntu 16.04安装Cobbler 2.9
查看>>
源码编译安装mysql-5.7.14
查看>>
CentOS6.7 DNS配置
查看>>
vRealize Operations Manager 6.5的安装与配置
查看>>
老舍|回忆初恋,只一眼就一生
查看>>
ip--lftp
查看>>
服务器端控件使用JQuery
查看>>
winform编程中鼠标坐标
查看>>
GO语言struct语法
查看>>
python读取excel表格的数据
查看>>
数据库多张表导出到excel
查看>>
中国医疗体系未来在哪?信息互通、智慧医疗将是重点
查看>>
centos 6.9安装jira 7.6.0
查看>>