资讯专栏INFORMATION COLUMN

通俗易懂的ref和out区别

OnlyLing / 1979人阅读

摘要:和是开发中经常用到的两个关键字,但是很多人没有搞清楚这两个关键字的具体区别,下面我们来说一下这两个关键的区别。零与的异同相同都是按地址传递使用后都将改变原来参数的值编译时处理方式相同属性不能作为参数传递。如下代码示例就是重载,可以通过编译

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

零、 ref 与 out 的异同

相同:

都是按地址传递;

使用后都将改变原来参数的值;

编译时处理方式相同;

属性不能作为参数传递。

不同:

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;
}

输出结果如下图所示:

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;
}

输出结果如下图所示:

小拓展:如果一个方法采用ref或out参数,而另一个方法不采用这两类参数,则可以进行重载。如下代码示例就是重载,可以通过编译:
static void Function(out int num)
{
    num = 120;
    num = num / 2;
}
static void Function(int num)
{
    num = num / 2;
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/61662.html

相关文章

  • 通俗易懂refout区别

    摘要:和是开发中经常用到的两个关键字,但是很多人没有搞清楚这两个关键字的具体区别,下面我们来说一下这两个关键的区别。零与的异同相同都是按地址传递使用后都将改变原来参数的值编译时处理方式相同属性不能作为参数传递。如下代码示例就是重载,可以通过编译 ref 和 out 是C#开发中经常用到的两个关键字,但是很多人没有搞清楚这两个关键字的具体区别,下面我们来说一下这两个关键的区别。 零、 ref ...

    itvincent 评论0 收藏0
  • 浅析 React 生命周期

    摘要:在使用组件的进行组件实例化时,得到的便是其返回值。也就是说,如果其子组件的或发生改变时,只会取决于那个组件的方法的返回值。文章为本人原创,原文见本人个博浅析生命周期一浅析生命周期二 Overview 最近常有学习React相关的技术,写了几个React的小Demo,使用 React/Express 技术栈。实在太小,羞于拿出来细说。React 的确是一个值得追随的技术。但React体系...

    lansheng228 评论0 收藏0
  • 关于this知识归纳(通俗易懂版)

    摘要:于是决定写个归纳。如果懂了,那么下面的例子也就会做了已知调用函数的对象是,所以指向,即。相当于在全局作用域声明了变量,并且赋值。实际上,调用函数的是关键字。使用来调用函数,即函数的构造调用时,我们会构造一个新对象,并把它绑定到调用中的上。 对this的理解,我一直都是用一句话概括:谁调用它,它就指向谁。 好像也没有什么问题,但仔细看了这本书和网上一些文章后,发现this的原理还挺讲究的...

    enda 评论0 收藏0
  • 通俗理解IP路由

    摘要:如果不通,我们往往会去怀疑是不是路由配置错了。主机之间通过交换机组成一个小型局域网,再通过一个路由器连接到更大的网络。这种情况下,被称为默认网关,这条表项也称为默认路由。策略路由的基本原理是系统会根据报文的特征使用不同的路由表。 showImg(https://segmentfault.com/img/bVbtpmL?w=799&h=446); 日常工作环境中,我们习惯于使用ping去...

    import. 评论0 收藏0
  • 通俗易懂,JDK 并发容器总结

    摘要:线程安全的线程安全的,在读多写少的场合性能非常好,远远好于高效的并发队列,使用链表实现。这样带来的好处是在高并发的情况下,你会需要一个全局锁来保证整个平衡树的线程安全。 该文已加入开源项目:JavaGuide(一份涵盖大部分Java程序员所需要掌握的核心知识的文档类项目,Star 数接近 14 k)。地址:https://github.com/Snailclimb... 一 JDK ...

    curlyCheng 评论0 收藏0

发表评论

0条评论

OnlyLing

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<