Unity ref 和out、 params的使用

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/leemu0822/article/details/101021441

相信很多刚接触C#或者unity的同学,都会看到很多这样那样的函数,带有ref ,out 或者params的参数,今天我就来讲一讲这三者的使用和区别:

ref

直接来看看实现的代码

  public void UpdateScore(ref int  score)
    {
        score = UnityEngine.Random.Range(80, 100);
    }

我使用unity在start里面调用测试

   void Start()
    {
        int myscore = 60;
        UpdateScore(ref myscore);
        print(myscore);



    }

看看打印结果:

有C语言或者C++基础的同学可能看出来了,这不就像C语言的指针变量吗?是的,这跟指针变量差不多,其实这是C#的参数引用传递,在方法中对参数所做的任何更改都将反映在该变量中

什么时候使用ref关键字呢

我理解:有时候我们不需要执行完这个方法就可以改变参数的值,或者想要改变的参数值比较多的时候

out

看看代码实现:

 public void GetScore(out int score)
    {
        score = UnityEngine.Random.Range(80, 100);
    }

调用

    void Start()
    {
        int score;
        GetScore(out score);
        print(score);



    }

结果:

其实out跟ref编译原理是一样的,区别就是ref需要先初始化值,而out不需要,总结起来就是ref 有进有出,out只出不进

out什么时候使用呢

我理解:用在没有返回值的函数就能返回值,例如在返回值是void的函数就能返回,还有就是我们经常使用的都是返回一个值的,那么我们如果想在一个函数中返回多个值呢?那么out就起作用了,我们可以使用out返回多个值

params

看看代码实现

   public void Getdd(params int[] pp)
    {
        foreach (var p in pp)
        {
            print(p);
        }
    }

调用

   void Start()
    {
       Getdd(1,2,3);



    }

结果:

是不是感觉有些不同,我们以往传递数组的时候,是不是不是这样传递的,params是为动态数组而准备的,我们直接输入数组的元素就行了,如果不加params,我们只能这样调用

    public void Getdd( int[] pp)
    {
        foreach (var p in pp)
        {
            print(p);
        }
    }

 void Start()
    {
       Getdd(new []{1,2,3});
    }

希望大家好好理解一下,也可以多看看unity系统函数,加深理解,这一篇完毕,如果对大家有用,关注或者点赞我

猜你喜欢

转载自blog.csdn.net/leemu0822/article/details/101021441
今日推荐