using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ClassTeachrefandout
{
//同:
//1、都能返回多个返回值。
//2、若要使用 ref 和out参数,则方法定义和调用方法都必须显式使用 ref和out 关键字。在方法中对参数的设置和改变将会直接影响函数调用之处(参数的初始值)。
//异:
//1、ref指定的参数在函数调用时候必须初始化,不能为空的引用。而out指定的参数在函数调用时候可以不初始化;
//2、out指定的参数在进入函数时会清空自己,必须在函数内部赋初值。而ref指定的参数不需要。
// 小結:ref有进有出,out只出不进。
class Program
{
static void Main(string[] args) {
int a=0;
int b=0;
GetVal( ref a,ref b);
// GetVal(out a,out b);
Console.WriteLine("a={0},b={1}",a,b);
}
static void GetVal(ref int a, ref int b) {
//a = 10;
//b = 20;
}
//static void GetVal(out int a, out int b) {
// a = 10;
// b = 20;
//}
}
}
可以上面的代码测试出我上面写的相同点不同点。同时ref和out作为形参的时候在方法中对参数的设置和改变将会直接影响函数调用之处(参数的初始值)
所以看可以看出ref和out都是引用类型,在堆中分配空间。
ref输出结果:
out输出结果: