C# ref关键字和out关键字

1.ref关键字    

    我们知道C#语言的数据类型分为值类型和引用类型,其中它们最典型的差别就是在作为方法的参数方面。值类型数据作为参数,修改形参时不会影响到实参;而引用类型数据作为参数,修改形参可以影响到实参。

    但是某些情况下,传递的是值类型数据,却要求把修改的结果带回来,像引用类型作为参数那样的效果,怎么办?在C#语言中,ref关键字就可以达到这样的效果。ref关键字使实参按引用类型传递,其效果是,当控制权传递回调用方法时,在方法中对形参的任何更改都将反映在该实参中。下面来看一个例子:

    //定义一个ref形参的方法

    static void  Method(ref int i)

    {

        i  =  44;

    }

    //在Main方法中调用上面定义的ref形参方法

    static void Main(string[] args)

    {

        int val = 0;

       Method(ref val); //执行完方法,变量val的值是44

       Console.WriteLine("val值是:" + val.ToString());   //此时输出结果是: “val值是:44”

    }

 

    ref关键字使整型变量val按照引用类型方式传递给Method方法,在Method方法中把参数 i 修改成了 44 ,因为是按引用传递,所以这时变量val的值就变成了 44 。同时要注意的是,若要使用ref参数,则方法定义和调用方法都必须显式使用ref关键字。

 

2.out关键字

    out关键字和ref关键字非常相似,都会导致参数按照引用方式传递。下面的示例演示了out关键字的方法:

    //定义一个out形参的方法

    static void  Method(out int i)

    {

        i  =  44;

    }

    //在Main方法中调用上面定义的out形参方法

    static void Main(string[] args)

    {

        int val;

       Method(out val); //执行完方法,变量val的值是44

       Console.WriteLine("val值是:" + val.ToString());   //此时输出结果是: “val值是:44”

    }

    需要说明的是,若要使用out参数,方法定义和调用方法都必须显式使用out关键字。大家感觉和ref关键字一模一样,都是把实参按照引用类型方式传递,都需要在方法定义和调用方法时使用关键字。但是他们有一个非常重要的区别,仔细对比ref的示例和out的示例就会发现,ref的示例中变量val在调用方法前赋值了,而out示例中变量val在调用方法之前没有赋值。这就是它们语法上的区别,传递到ref的参数必须最先初始化。而out则不同,out的参数在传递之前不需要初始化。

    还有一点需要说明,尽管作为out参数传递的变量不必在传递之前进行初始化,但需要调用方法在方法返回之前赋值。也就是说,上面示例中的Method方法必须在执行完以前对变量 i 进行赋值。

    两个关键字语法相似,这里对ref和out进行一个总结,ref关键字重在修改参数的数据,而out关键字重在带回执行结果。

posted @ 2023-05-10 10:34  夜店耍流氓  阅读(23)  评论(0编辑  收藏  举报