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

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值