c# 方法参数修饰符(out、ref、in)的区别

在C#中,ref、out和in是三种方法参数修饰符,它们在传递参数的方式和作用上有所不同。

ref修饰符

传递方式:使用ref修饰符的参数可以是输入输出参数,即在方法调用前后都可以对其进行修改。
作用:通过ref修饰符传递的参数必须在方法调用之前初始化,并且方法内对参数的修改会对调用方的变量产生影响。ref修饰符可以用于值类型和引用类型参数。
out修饰符:

传递方式:使用out修饰符的参数只能作为输出参数,即在方法内部必须对其进行赋值。
作用:通过out修饰符传递的参数可以在方法内部进行赋值,而不需要在方法调用之前初始化。out修饰符可以用于值类型和引用类型参数。
in修饰符:

传递方式:使用in修饰符的参数只能作为输入参数,即在方法内部不能对其进行修改。
作用:通过in修饰符传递的参数可以防止方法对其进行修改,从而提高代码的可靠性和安全性。in修饰符只能用于值类型和只读引用类型参数,并且不能用于方法的返回值。
总结:

ref修饰符用于输入输出参数,方法内部可以对其进行修改。
out修饰符用于输出参数,方法内部必须对其进行赋值。
in修饰符用于输入参数,方法内部不能对其进行修改。
使用这些修饰符可以灵活地控制方法参数的传递方式,从而满足不同的需求。

internal class Program
    {
        private static void Main(string[] args)
        {
            //int num1 = 10;
            //number0(num1);
            //Console.WriteLine("初始值:" + num1);
            //Console.ReadLine();
            //------------------------------
            //int num1 = 10;//使用ref修饰符,实参必须初始化
            //numberRef(ref num1);
            //Console.WriteLine("初始值:" + num1);
            //Console.ReadLine();
            //-------------------------------
            //int num1 = 10;
            //numberOut(out num1);
            //Console.WriteLine("初始化的值:" + num1);
            //Console.ReadLine();
            //---------------------------------
            int num1 = 10;
            numberIn(in num1);//可以省略in
            Console.ReadLine();
        }

        /// 
        /// 无修饰符
        /// 
        /// 
        public static void number0(int num1)
        {
            num1 *= 2;
            Console.WriteLine("修改后的值:" + num1);
        }

        /// 
        /// ref(reference)修饰的参数必须初始化,方法内部,通过引用传递,修改实参的值,最终输出
        /// 
        /// 
        public static void numberRef(ref int num1)
        {
            num1 *= 2;
            Console.WriteLine("ref参数修改后的值:" + num1);
        }

        /// 
        /// out修饰的参数可以初始化,也可以不初始化,传递过来的参数会被清空,最终,以方法内部赋值的结果为准
        /// 
        /// 
        public static void numberOut(out int number1)
        {
            number1 = 20;
            Console.WriteLine("out参数修改的值:" + number1);
        }

        /// 
        /// in修饰符参数,限制方法参数传递过来的实参的修改
        /// 
        /// 
        public static void numberIn(in int number1)
        {
            //方法内部不能修改,传递过来的实参,只能读取,不能修改
            // number1 = 10;
            Console.WriteLine("in 参数修饰符:" + number1);
        }
    }

你可能感兴趣的:(c#,参数修饰符)