欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C#中ref、out、params关键字的介绍和基础用法

程序员文章站 2022-04-30 13:37:47
...

一、介绍

1.1、相同点:ref与out关键字都是按地址传递,使用后都将改变原来参数的数值。

1.2、不同点:

①ref关键字,使用引用类型参数,在方法中对参数所做的任何更改都将反应在该变量中(也就是说:ref可以将参数传递到函数中;但是需要在函数外面初始化传入的ref参数)

②out关键字,会导致参数通过引用来传递,无法把一个数值从out传递进去的,out进去后,参数的数值为空,所以需要在函数里面初始化out参数。

③params关键字,用于方法参数长度不定的情况。有时候不能确定一个方法的方法参数到底有多少个,可以使用params关键字来解决问题。

1.3、参考示例:

①ref关键字示例

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Test_RefAndOut
{
    class Program
    {
        static void Main(string[] args)
        {
            int testNumber = 6;
            Console.WriteLine("初始值为:" + testNumber);

            //1-调用Ref参数的方法
            RefMethod(ref testNumber);

            Console.WriteLine("3-经过Ref参数方法处理的值为:"+testNumber);

       

            Console.ReadLine();
        }

        /// <summary>
        /// Ref参数的方法
        /// </summary>
        /// <param name="curNumber">输入的ref参数(需要在函数外部先初始化)</param>
        private static void RefMethod(ref int curNumber)
        {
            Console.WriteLine("1-Ref参数方法当前初始输入的参数为:"+curNumber);
            if (curNumber >= 0)
            {
                curNumber *= 1024;
            }
            else
            {
                curNumber = -1;
            }

            Console.WriteLine("2-Ref参数方法当前处理得到输入的参数为:" + curNumber);
        }

       

    }//Class_end
}

ref关键字输出结果:

C#中ref、out、params关键字的介绍和基础用法

②out关键字示例

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Test_RefAndOut
{
    class Program
    {
        static void Main(string[] args)
        {
            int testNumber = 6;
            Console.WriteLine("初始值为:" + testNumber);

            //2-调用Out参数的方法
            OutMethod(out testNumber);

            Console.WriteLine("3-经过Out参数方法处理的值为:" + testNumber);



            Console.ReadLine();
        }

       

        /// <summary>
        /// Out参数方法
        /// </summary>
        /// <param name="curNumber">输入的Out参数(需要在函数内部初始化)</param>
        private static void OutMethod(out int curNumber)
        {
            ////报错
            //Console.WriteLine("1-Out参数方法当前初始输入的参数为:" + curNumber);
            //先赋值初始化
            curNumber = 1;

            Console.WriteLine("1-Out参数方法当前初始输入的参数为:" + curNumber);

            if (curNumber >= 0)
            {
                curNumber *= 1024;
            }
            else
            {
                curNumber = -1;
            }

            Console.WriteLine("2-Out参数方法当前处理得到输入的参数为:" + curNumber);
        }


     
    }//Class_end
}

out关键字输出结果

C#中ref、out、params关键字的介绍和基础用法

③ref与out关键字结合使用示例

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Test_RefAndOut
{
    class Program
    {
        static void Main(string[] args)
        {
            int testNumber1, testNumber2;
            testNumber1 = 6;
            testNumber2 = 3;
            
            Console.WriteLine("初始值的ref参数1为:" + testNumber1 + "   初始值的out参数2为:" + testNumber2);

            // Ref参数与Out参数方法
            RefAndOutMethod(ref testNumber1, out testNumber2);

            Console.WriteLine("3-经过 RefAndOut参数方法处的ref参数1为:" + testNumber1 + "   经过RefAndOut初始值的out参数2为:" + testNumber2);

            Console.ReadLine();
        }

      

        /// <summary>
        /// Ref参数与Out参数方法
        /// </summary>
        /// <param name="curNumber1">ref 参数</param>
        /// <param name="curNumber2">out 参数</param>
        private static void RefAndOutMethod(ref int curNumber1,out int curNumber2)
        {
            //out参数需要在函数内初始化
            curNumber2 = 1024;

            Console.WriteLine("1-RefAndOut参数方法----当前初始输入的ref参数1为:" + curNumber1+ "   当前初始输入的out参数2为:"+ curNumber2);

            if (curNumber1 >= 0)
            {
                curNumber2 *= curNumber1;
            }
            else
            {
                curNumber2 = 0;
            }

            Console.WriteLine("2-RefAndOut参数方法----当前处理得到的ref参数1为:" + curNumber1 + "   当前处理得到的out参数2为:" + curNumber2);

        }

        /// <summary>
    
    }//Class_end
}

ref和out关键字输出结果

C#中ref、out、params关键字的介绍和基础用法

④param关键字示例

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Test_RefAndOut
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] testNumber1 = { 1, 8, 3 };
            int[] testNumber2 = { 6, 11, 7,9,8,6,54 };


            //Params参数方法
            ParamsMethod(testNumber1);
            Console.WriteLine("----------------------\n");
            ParamsMethod(testNumber2);

        

            Console.ReadLine();
        }



        /// <summary>
        /// Params参数方法
        /// </summary>
        /// <param name="curNumbers">不定长度的参数</param>
        private static void ParamsMethod(params int[] curNumbers)
        {
            int len = curNumbers.Length;
            for (int i = 0; i < len; i++)
            {
                Console.WriteLine("Params参数方法:"+curNumbers[i]);
            }
        }

    }//Class_end
}

params关键字输出结果

C#中ref、out、params关键字的介绍和基础用法