out ref区别

1、使用ref型参数时,传入的参数必须先被初始化。对out而言,必须在方法中对其完成初始化。

2、out适合用在需要retrun多个返回值的地方,而ref则用在需要被调用的方法修改调用者的引用的时候。

两者都是按地址传递的,使用后都将改变原来的数值。类似C++的指针(*和#)
ref可以把参数的数值传递进函数,out是要把参数清空,就是说你无法把一个数值从out传递进去的,out进去后,参数的数值为空,所以你必须初始化一次。这个就是两个的区别,或者说就像有的网友说的,ref是有进有出,out是只出不进。经典!!!

以下来自MSDN:

out:



class OutReturnExample


     static void Method(out int i, out string s1, out string s2) 

     {

      i = 44; s1 = "I‘ve been returned"; s2 = null; 

      } 

      static void Main() 

     { 

        int value; string str1, str2; 

    Method(out value, out str1, out str2); 

       // value is now 44 

   // str1 is now "I‘ve been returned" 

  // str2 is (still) null;

      } 

 }

ref:





ref中的original可以被传入 out中的value和str1 str2不能被传入

out适合用在需要多个输出结果或者值的地方,而ref则用在需要被调用的方法修改调用者的引用的时候。还有就是属性不能作为out传入。

class RefRefExample

{
    static void Method(ref string s)
    {
        s = "changed";
    }
    static void Main()
    {
        string str = "original";
        Method(ref str);
        // str is now "changed"

    }
}
时间: 2024-11-05 12:17:19

out ref区别的相关文章

out ref 区别

在C#这门高级语言中,你是否注意过ref与out的用法?你是否为在调用方法时需要多个返回值呢?不用急,接下来,我们去一起去研究一下这个问题... 其实呢,C#语言中,参数的传递一共有两种方法,值传递和引用传递. 而ref与out这两种方式都属于引用传递,只是他们的用法稍有不同. ref的特点是有进有出,即在传递参数之前就已经对它进行赋值,在传入方法体时,是将该数的地址传了进来,如果对其进行相应的赋值操作,直接改的是地址里的值,所以,当该方法执行完,该数的值也就跟着改变了. 代码如下: stati

C#中out与ref区别

一.ref(参考)与out区别 1.out(只出不进) 将方法中的参数传递出去,在方法中将该参数传递出去之前需要在该方法起始赋初值:在方法外传递的该参数可以不用赋值: 简单理解就是:将一个东西抛出去之前必须对此东西进行修改,否则就不用抛出去,修改时的动作必须发生在方法的起始. 2.ref(有进有出)在方法外引用参数,并可在方法中进行修改,修改后该参数将被更新.在方法外引用该参数时需要在方法外赋初值. 简单理解就是:拿别人的东西之前需要请人家做个标记,然后把东西拿来进行修改,修改后该东西就变成了新

C#之out和ref区别

out与ref的区别总结:1.两者都是通过引用来传递.2.两者都按地址传递的,使用后都将改变原来参数的数值.3.属性不是变量,因此不能作为 out或ref 参数传递.4.若要使用 ref 或 out,方法定义和调用方法都必须显式使用 out.ref 关键字.5.rel可以把参数的数值传递进函数,但是out是要把参数清空,就是说你无法把一个数值从out传递进去的,out进去后,参数的数值为空,所以你必须初始化一次.或者说,rel是有进有出,out是只出不进6.尽管 ref 和 out 在运行时的处

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

//out传参前需要对参数进行赋值处理,ref则不需要.//out.ref 传参都可以对值进行改变 1 static void Main(string[] args) 2 { 3 int I = 10; 4 //int J = 10; 5 //int I; 6 int J; 7 //int[] k=new int[5]{1,2,3,4,5}; 8 int[] k = new int[5]; 9 //int[] l = new int[5]{1,2,3,4,5}; 10 int[] l = new

SQL业务审核与优化

审核   什么是业务审核 类似与code review 评审业务Schema和SQL设计 偏重关注性能 是业务优化的主要入口之一 审核提前发现问题,进行优化 上线后通过监控或巡检发现问题,进行优化 Schema设计审核 表和字段命名是否合规 字段类型,长度设计是否适当 表关联关系是否合理 主键,更新时间保留字段等是否符合要求 约束,默认值等配置是否恰当 了解业务,表数据量,增长模式 数据访问模式,均衡度 根据业务需求,表是否需要分区,是否有数据什么周期 SQL语句审核 SQL语句的执行频率 表上

设计模式学习第一天:23种设计模式(全)

C#常见的设计模式 一.概要: 模式分为三种,设计模式.体系结构模式与惯用法.其中惯用法是一种语言紧密相关的模式,例如,定界加锁模式其实是一种惯用法. 在C#项目开发过程中,很多情况下您已经使用了某些模式,但或许您并不知道自己所使用的这种解决方案是一种已经被总结归纳的模式. 工厂.策略.桥接.模板方法.代理等等23种Gof经典模式是属于设计模式,设计模式的粒度相对较小,基本上用于提高模块内部的可扩展性和可维护性需求 三层.MVC.IoC/DI等属于体系结构模式,粒度比设计模式大,它是从项目的整体

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

本文来自我的github pages博客http://galengao.github.io/ 即www.gaohuirong.cn 摘要: 本篇是根据官网中的每个一点来翻译.举例.验证的:英语不好,所以有些话语未必准确,请自行查看官网,若有些点下面没有例子的是因为当时一下子没有想出那么多来,如果大家有遇上好的例子,欢迎在下面留言我持续更新 查看执行计划的关键EXPLAIN 版本MYSQL5.6,用到的库是官网例子sakila,自行下载导入 由于要把每个点都翻译出来,还需要举例,所以需要一定的时间

MySQL索引管理及执行计划

第1章 索引介绍: 索引是对数据库表中一列或者多了的值进行排序的一种结构,使用索引可以快速访问数据库表中的特定信息,如果想按特定职员的姓名来查找,则与他在表中搜索所有的行相比,索引有助于更快的获取信息 索引的一个主要目的就是加快检索表中的数据的方法,既能协助信息搜索者尽快找到符合限制条件的记录ID的辅助数据结构 1.1 索引的类型介绍: btree:B+树索引    最为常用 hash:hash索引 fulltest:全文索引 rtree:r数索引 第2章 索引管理 2.1 B树索引的分类: 主

关于Explain

最近在对sql进行性能优化因此对explain相关的知识进行一个简单的整理归纳. EXPLAIN: 为SELECT语句中使用到的每个表返回一条 SELECT 执行的详细信息:按照MySQL在处理语句时读取它们的顺序列出这些表. 命令输出格式 id = 1 select_type = SIMPLE table = clazz partitions = type = const possible_keys = PRIMARY key = PRIMARY key_len = 98 ref = cons