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 区别的更多相关文章

  1. out ref区别

    1.使用ref型参数时,传入的参数必须先被初始化.对out而言,必须在方法中对其完成初始化. 2.out适合用在需要retrun多个返回值的地方,而ref则用在需要被调用的方法修改调用者的引用的时候. ...

  2. C#中out与ref区别

    一.ref(参考)与out区别 1.out(只出不进) 将方法中的参数传递出去,在方法中将该参数传递出去之前需要在该方法起始赋初值:在方法外传递的该参数可以不用赋值: 简单理解就是:将一个东西抛出去之 ...

  3. C#之out和ref区别

    out与ref的区别总结:1.两者都是通过引用来传递.2.两者都按地址传递的,使用后都将改变原来参数的数值.3.属性不是变量,因此不能作为 out或ref 参数传递.4.若要使用 ref 或 out, ...

  4. C# Out和Ref区别

    rel是有进有出,out是只出不进 ref 要求参数在传递给函数前要初始化,out则不需要

  5. C# 中传参中的OUT 和 ref 区别 笔记

    //out传参前需要对参数进行赋值处理,ref则不需要.//out.ref 传参都可以对值进行改变 1 static void Main(string[] args) { ; //int J = 10 ...

  6. MYSQL EXPLAIN执行计划命令详解(支持更新中)

    本文来自我的github pages博客http://galengao.github.io/ 即www.gaohuirong.cn 摘要: 本篇是根据官网中的每个一点来翻译.举例.验证的:英语不好,所 ...

  7. MySQL索引管理

    一.索引介绍 1.什么是索引 1.索引好比一本书的目录,它能让你更快的找到自己想要的内容. 2.让获取的数据更有目的性,从而提高数据库索引数据的性能. 2.索引类型介绍 1.BTREE:B+树索引 2 ...

  8. .Net23种设计模式

    C#常见的设计模式 一.概要: 模式分为三种,设计模式.体系结构模式与惯用法.其中惯用法是一种语言紧密相关的模式,例如,定界加锁模式其实是一种惯用法. 在C#项目开发过程中,很多情况下您已经使用了某些 ...

  9. mysql 开发进阶篇系列 2 SQL优化(explain分析)

    接着上一篇sql优化来说 1. 定位执行效率较低的sql 语句 通过两种方式可以定位出效率较低的sql 语句. (1) 通过上篇讲的慢日志定位,在mysqld里写一个包含所有执行时间超过 long_q ...

随机推荐

  1. 剑指offer-平衡二叉树-python

    题目描述 输入一棵二叉树,判断该二叉树是否是平衡二叉树. 思路: 平衡二叉树 (AVL)平衡二叉树是一种二叉排序树,其中每个结点的左子树和右子树的高度差至多等于1.它是一种高度平衡的二叉排序树.意思是 ...

  2. DataTable中如何去除重复的项 (获得某个字段中的不重复项)

    就是获取DataTable中某一列的值,因为从数据库中检索数据时,按照2个字段进行分组,而要获得的那一列刚好在分组这两列中,所以该列的值必然有重复,于是就想到了去除重复,有了思路以后在网上看了一些方法 ...

  3. JAVA中关于日期的最常见的操作

    //获取当前系统的时间戳 long times = System.currentTimeMillis(); //创建一个当前日期对象 Date now = new Date(); //基于指定的时间戳 ...

  4. .net Core——SqlSugar使用

    一.DbContext配置 public class DbContext { public DbContext() { Db = new SqlSugarClient(new ConnectionCo ...

  5. Python字符串(str)方法调用

    # str# n = 'pianYU'# v = n.capitalize() # 将字符串的首字母大写# print(v)## n = 'pianYI'# v1 = n.isupper() # 判断 ...

  6. ubuntu下安装python3.6.5导入ssl模块失败

    1.问题 python安装完毕后,提示找不到ssl模块: [root@localhost ~]# python3 Python ( , ::) [GCC (Red Hat -)] on linux2 ...

  7. Python核心技术与实战——七|自定义函数

    我们前面用的代码都是比较简单的脚本,而实际工作中是没有人把整个一个功能从头写到尾按顺序堆到一块的.一个规范的值得借鉴的Python程序,除非代码量很少(10行20行左右)应该由多个函数组成,这样的代码 ...

  8. Linux shell 误操作

    shell脚本在日常运维中是必不可少会应用到,下面是自己亲身经历过的一件事.会了定期清除日志,编写了一个shell脚本,内容如下: [root@centos- tmp]# more remote_lo ...

  9. svn 命令行使用总结

    1.上传项目到SVN服务器上 svn import project_dir(本地项目全路径) http://192.168.1.242:8080/svn/IOS/Ben/remote_dir(svn项 ...

  10. thinkphp5 yii2 laravel5.1 框架性能压测对比图

    nginx+php7环境,opcache已经开启,每测试一个框架都重启服务器并且预热访问三次,压测工具ab.exe. laravel,thinkphp,yii都已关闭debug,该做的优化命令都搞了, ...