ref传值和out传值

目录

ref,out区别

out传值

ref传值


ref,out区别

out传值

1.定义方法时,参数用out修饰,在调用该方法的时候,参数也需要用out修饰。

2.在定义方法时,必须给参数赋初值。

2.在调用该方法时,可以赋初值,也可以不赋初值。

4.out这个单词是“出去”的意思,所以参数加out就是将方法里面赋的那个值传到外面去了,方法外面赋不赋值都不起作用,所以说out只能将在方法里面赋的初值传出去,但不能将外面赋的值传入。

5.out一般用在函数需要有多个返回值的场所

下面这个例子就是使用out传值

class Program
    {
        static void Main(string[] args)
        {
            //int number1=90;		//参数使用out修饰,AddNumber方法外面也可以赋值,但是调用方法后的结果仍然是110
            int number1;			//参数使用out修饰,AddNumber方法外面可以不给变量赋值
            int sum=AddNumber(out number1);		//AddNumber方法中参数用out修饰,调用此方法时,参数也需要用out修饰
            Console.WriteLine(sum);            //显示的结果为110
            Console.ReadKey();
        }

        public static int AddNumber(out int num1)
        {
            num1=100;			//方法的参数用out修饰,必须在方法里面给它赋值
            return num1+10;		//无论方法外面num1的值是多少,返回结果都是110
        }
    }

out一般用在函数需要有多个返回值的场所,下面这个例子就是用out传值,有三个返回值

	class Program
    {
        static void Main(string[] args)
        {
            int number1;
            int number2;
            int sum = Sum(out number1,out number2); 		            //调用Sum方法
            Console.WriteLine("{0},{1},{2}", number1, number2, sum);	//显示3个值:10,20,30
            Console.ReadKey();
        }

        public static int Sum(out int num1, out int num2)
        {
            num1 = 10;				//使用out,必须在方法里面赋初值,第一个参数值为10
            num2 = 20;				//使用out,必须在方法里面赋初值,第二个参数值为20
            return num1 + num2;		//返回两个数之和
        }
    }

ref传值

1.ref的用法和out有所不同,相同点是,ref和out一样,方法中的参数用ref修饰,调用此方法的时候参数也需要用ref修饰。

2.不同的是,out只能将值传出,但是ref既可以传入,也可以传出。想要传入,必须在方法外赋值,也就是说,传入方法中的参数必须现在外面被初始化。方法里面可以赋初值,也可以不赋初值。

下面这段代码,在Show方法中没有给num1,num2赋初值,在调用该方法时,给参数赋了初值10和20,这时候,调用show方法的时候,会将10,20传进show方法中,然后在将求和结果30返回,这就是ref将值传入。

    class Program
    {
        static void Main(string[] args)
        {
            //ref 用的时候必须要给方法外这个变量赋初值,和out有区别,out可以把方法里的值传出去,ref可以把值传到方法里,又可以把值传到方法外
            int number1=10 ;
            int number2=20 ;
            int sum = Show(ref number1, ref number2);
            Console.WriteLine("{0}",number1);
            Console.WriteLine("{0}", number2);
            Console.WriteLine("{0}", sum);        //显示结果30
            Console.ReadKey();
        }

        public static int Show(ref int num1, ref int num2)
        {
            return num1 + num2;
        }
    }

而下面这段代码,在show方法中给参数赋了初值100,200,在调用该方法的时候也赋了初值,这时候,在程序在调用show方法的时候,先将10,20的值传进show方当中,但是此时,里面两个参数有了初值100和200,这时候返回传出的结果四100+200,也就是传出去300。即ref可传入,也可传出。

        static void Main(string[] args)
        {
            //ref 用的时候必须要给方法外这个变量赋初值,和out有区别,out可以把方法里的值传出去,ref可以把值传到方法里,又可以把值传到方法外
            int number1=10 ;
            int number2=20 ;
            int sum = Show(ref number1, ref number2);
            Console.WriteLine("{0}",number1);      //100
            Console.WriteLine("{0}", number2);     //200
            Console.WriteLine("{0}", sum);         //300
           Console.ReadKey();
        }

        public static int Show(ref int num1, ref int num2)
        {
            num1 = 100;
            num2 = 200;
            return num1 + num2;
        }

有不对的地方,欢迎批评指正~~~

发布了71 篇原创文章 · 获赞 21 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/wtt15100/article/details/104413408