通俗易懂的ref和out区别

简介: 通俗易懂的ref和out区别

refout 是C#开发中经常用到的两个关键字,但是很多人没有搞清楚这两个关键字的具体区别,下面我们来说一下这两个关键的区别。


零、 ref 与 out 的异同

  1. 相同:
  • 都是按地址传递;
  • 使用后都将改变原来参数的值;
  • 编译时处理方式相同;
  • 属性不能作为参数传递。


  1. 不同:
  • ref 将参数值传进方法, out 无法将参数值传入方法;
  • ref 传入参数前必须先初始化, out 不必在参数传输方法前初始化,但必须在方法中初始化;
  • ref 用在需要被调用的方法修改调用者的引用的时候, out 用在需要返回多个结果的地方。

一、代码演示

ref 将参数值传进方法

static void Main(string[] args)
{
    //初始化
    int number = 50;
    Console.WriteLine("调用方法前 number 值:" + number);
    RefFunction(ref number);
    Console.WriteLine("调用方法后 number 值:" + number);
    Console.Read();
}
// 传入的参数值是 50 ,方法中使用的num值也是50
static void RefFunction(ref int num)
{
    num = num / 2;
}

输出结果如下图所示:

image.png

out 无法将参数值传入方法

static void Main(string[] args)
{
    int number = 50;
    Console.WriteLine("调用方法前 number 值:" + number);
    OutFunction(out number);
    Console.WriteLine("调用方法后 number 值:" + number);
    Console.Read();
}
// 无法将的参数值50传入 ,但是必须在方法中初始化
static void OutFunction(out int num)
{
    //初始化
    num = 120;
    num = num / 2;
}

输出结果如下图所示:

image.png

小拓展:如果一个方法采用ref或out参数,而另一个方法不采用这两类参数,则可以进行重载。如下代码示例就是重载,可以通过编译:

static void Function(out int num)
{
   num = 120;
   num = num / 2;
}
static void Function(int num)
{
   num = num / 2;
}
目录
相关文章
|
5月前
|
存储 运维 前端开发
【面试题】吃透Promise?先实现一个再说(包含所有方法)(一)
【面试题】吃透Promise?先实现一个再说(包含所有方法)(一)
|
5月前
|
前端开发
【面试题】吃透Promise?先实现一个再说(包含所有方法)(二)
【面试题】吃透Promise?先实现一个再说(包含所有方法)(二)
|
缓存 索引
ES经典面试题:谈谈filter和query有什么区别?
ES经典面试题:谈谈filter和query有什么区别?
435 0
ES经典面试题:谈谈filter和query有什么区别?
|
5月前
|
JavaScript
你可能有疑问,为什么对象类型不能用ref呢?
你可能有疑问,为什么对象类型不能用ref呢?
|
5月前
|
存储 前端开发 索引
前端知识笔记(三)———Map和Set有什么区别?
前端知识笔记(三)———Map和Set有什么区别?
107 0
|
前端开发
前端学习案例-ref的基本用法
前端学习案例-ref的基本用法
90 0
前端学习案例-ref的基本用法
|
前端开发
前端学习案例-ref的进阶用法2
前端学习案例-ref的进阶用法2
86 0
前端学习案例-ref的进阶用法2
|
前端开发
前端学习案例-ref的进阶用法1
前端学习案例-ref的进阶用法1
82 0
前端学习案例-ref的进阶用法1
|
存储 Java 容器
Map,List的用法与区别,很基础,蛋或许你不通透
Map,List的用法与区别,很基础,蛋或许你不通透
134 0
Map,List的用法与区别,很基础,蛋或许你不通透
|
JavaScript
面试题 ref是什么
面试题 ref是什么
109 0
面试题 ref是什么