楼上黑马帝解释的非常好
{:soso_e130:}
out和ref属于引用类型传递他们传的是内存地址不是传值.
ref 传递的参数是双向,可以传入也可以传出:
- class Program
- {
- static void Main(string[] args)
- {
- int iNumber = 100;
- int iTemp =Test(ref iNumber);
- Console.WriteLine("ref参数传出的值为a:{0}\nref传入后经方法retrun的值:{1}",iNumber,iTemp);
- Console.ReadKey();
- }
- static int Test(ref int iNum)
- {
- int temp = iNum;//方法内可接收外部传入的值.
- iNum = 50;
- return temp;
- }
- }
复制代码
out传递参数是单向的只能传出值.当需要从一个方法中传出多个值时用.
- class Program
- {
- static void Main(string[] args)
- {
- int iNumber;
- Test(out iNumber);
- Console.WriteLine("out参数传出的值是:{0}",iNumber);
-
- Console.ReadKey();
- }
- static void Test(out int iNum)
- {
- //int temp = iNum;//错误!
- iNum = 50; //out传入的参数要先赋值才能使用.
-
- }
- }
-
复制代码
相同点:两者都是引用传递,都能改变要传递参数的值。
区别:
out修饰的参数在传递前可以不用赋初值,但在方法里必须先重新赋值。最后改变要传递参数的值,并返回。。即使传参前赋值,在方法里也不会被使用。
ref修饰的参数在传递前就要赋值,接收的参数无需重新赋值,就可以被方法里的代码调用。最后改变要传递参数的值,并返回。 |