C# out 和 ref 区别
C#里面的 out 和ref参数时常会用到 记录一下:
public void Start()
{
//outSum没必要赋值,赋值了也完全没用。
//如果AddByOut函数内部直接使用out对应的参数,会报错:使用了未被赋值的 out 参数a
int outSum = 1;
int ov1 = 2;
int ov2 = 3;
AddByOut(out outSum, ov1, ov2);
Console.WriteLine("outSum : " + outSum + " v1: " + ov1 + " v2: " + ov2);
//refSum 必须赋值
int refSum = 1;
int rv1 = 2;
int rv2 = 3;
//如果refSum没有赋值,这里会报错:使用了未赋值的局部变量 refSum
AddByRef(ref refSum, rv1, rv2);
Console.WriteLine("refSum : " + refSum + " v1: " + rv1 + " v2: " + rv2);
}
public void AddByOut(out int a, int b, int c)
{
//a = a + b + c;// a 未被赋值,不能直接使用,即使是调用的地方 out对应的参数初始化也没用
a = b + c;
}
public void AddByRef(ref int a, int b, int c)
{
a = a + b + c; // 可以直接使用a
}
总结: 1、调用带ref关键字的函数,必须对 ref 对应的参数赋值;而out关键字不需要。
2、带ref 关键字的函数内部可以直接使用 ref 对应的参数;out 关键字的函数,必须在函数内部对out对应的参数赋值后才能使用。
(归结1,2点:ref在外面初始化,out在里面初始化)
3、两个关键字都能使值类型按引用类型使用,即修改了函数外部申明的变量
C# out 和 ref 区别的更多相关文章
- out ref区别
1.使用ref型参数时,传入的参数必须先被初始化.对out而言,必须在方法中对其完成初始化. 2.out适合用在需要retrun多个返回值的地方,而ref则用在需要被调用的方法修改调用者的引用的时候. ...
- C#中out与ref区别
一.ref(参考)与out区别 1.out(只出不进) 将方法中的参数传递出去,在方法中将该参数传递出去之前需要在该方法起始赋初值:在方法外传递的该参数可以不用赋值: 简单理解就是:将一个东西抛出去之 ...
- C#之out和ref区别
out与ref的区别总结:1.两者都是通过引用来传递.2.两者都按地址传递的,使用后都将改变原来参数的数值.3.属性不是变量,因此不能作为 out或ref 参数传递.4.若要使用 ref 或 out, ...
- C# Out和Ref区别
rel是有进有出,out是只出不进 ref 要求参数在传递给函数前要初始化,out则不需要
- C# 中传参中的OUT 和 ref 区别 笔记
//out传参前需要对参数进行赋值处理,ref则不需要.//out.ref 传参都可以对值进行改变 1 static void Main(string[] args) { ; //int J = 10 ...
- MYSQL EXPLAIN执行计划命令详解(支持更新中)
本文来自我的github pages博客http://galengao.github.io/ 即www.gaohuirong.cn 摘要: 本篇是根据官网中的每个一点来翻译.举例.验证的:英语不好,所 ...
- MySQL索引管理
一.索引介绍 1.什么是索引 1.索引好比一本书的目录,它能让你更快的找到自己想要的内容. 2.让获取的数据更有目的性,从而提高数据库索引数据的性能. 2.索引类型介绍 1.BTREE:B+树索引 2 ...
- .Net23种设计模式
C#常见的设计模式 一.概要: 模式分为三种,设计模式.体系结构模式与惯用法.其中惯用法是一种语言紧密相关的模式,例如,定界加锁模式其实是一种惯用法. 在C#项目开发过程中,很多情况下您已经使用了某些 ...
- mysql 开发进阶篇系列 2 SQL优化(explain分析)
接着上一篇sql优化来说 1. 定位执行效率较低的sql 语句 通过两种方式可以定位出效率较低的sql 语句. (1) 通过上篇讲的慢日志定位,在mysqld里写一个包含所有执行时间超过 long_q ...
随机推荐
- HTTP报文结构和内容(转)
HTTP请求报文格式就如下图所示: 1. 请求报文 一个HTTP请求报文由请求行(request line).请求头部(header).空行和请求数据4个部分组成. 大致结构是这样的: <req ...
- 基于 Redux + Redux Persist 进行状态管理的 Flutter 应用示例
好久没在 SegmentFault 写东西,唉,也不知道 是忙还是懒,以后有时间 再慢慢写起来吧,最近开始学点新东西,有的写了,个人博客跟这里同步. 一直都在自己的 React Native 应用中使 ...
- PY个康托展开
卡 PY 的题,和 BIT 一样,不说了 内存还卡的挺紧的? 具体而言,刚好打完的 BIT 扒过来用用,然后打个阶乘就完事儿了 没什么好说的 Code fac=[0 for i in range(10 ...
- HTTP1.0、HTTP 1.1、HTTP 2.0之间的主要区别
HTTP1.0与HTTP 1.1的主要区别 长连接 节约带宽 HOST域 HTTP1.1与HTTP 2.0的主要区别 多路复用 二进制分帧 首部压缩 服务器推送 一.HTTP1.0与HTTP 1. ...
- express与koa对比
使用体验koaconst Koa = require('koa');const app = new Koa();app.use(ctx => { ctx.body = 'Hello Koa'; ...
- OC+swift混编
作者:fengsh998 原文地址:http://blog.csdn.net/fengsh998/article/details/34440159 转载请注明出处 如果觉得文章对你有所帮助,请通过留言 ...
- Linux系统性能测试工具(二)——内存压力测试工具memtester
本文介绍关于Linux系统(适用于centos/ubuntu等)的内存压力测试工具-memtester.内存性能测试工具包括: 内存带宽测试工具——mbw: 内存压力测试工具——memtester: ...
- mobilenetV3
1.MobilenetV3是通过NAS得到的,结合了v1,v2和MnasNet的结构,包括v1的dw,v2的linear bottleneck和逆残差结构, MnasNet的se结构(接在部分line ...
- GUI学习之n——自定义信号
PyQt中是依靠信号——槽的机制来运行,可是有些时候需要我们定义一下些新的信号以满足使用要求,例如按钮是没有右击的效果,那我们怎么创建一个新的信号呢? 首先要注意,新的信号是要以类属性的形式来定义 c ...
- 常用windbg命令(转)
1.查看版本信息:version.vertarget. 2.查看模块信息:lm.!dlls.!lmvi等. 3.调用栈:用k命令显示调用栈,用.frames命令切换栈帧. 4.内存操作:读内存用d命令 ...