之前或许没好好学,今天认真看一下还是很清晰的
先贴段代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace template
{
class Program
{
static void TestOut(out int num)
{
//此处不可以使用,因为out变量必须被赋值过一次后才可以被读取!
//Console.WriteLine("Here is {0}", num);
//注释掉会出错
num = 5;
//同理,此处可以,因为被赋值过一次
Console.WriteLine("Here is {0}", num);
}
static void TestRef(ref int num)
{
//与out做出对比,随意用。
Console.WriteLine("Here is TestRef {0 }", num);
//注释掉不会出错
num = 4;
Console.WriteLine("Here is TestRef {0 }", num);
}
static void Main(string[] args)
{
int k;
TestOut(out k);
Console.WriteLine(k);
int testRef=5;
//注释掉上面的 使用 int testRef;会报错
TestRef(ref testRef);
Console.WriteLine(testRef);
}
}
}
其实区别也很明显
对于ref而言,在传参前不仅要有声明,而且要有初始化。
对于out而言,在传参前声明即可,不必须初始化。
原因是 out在使用时,在形参部分的函数中,必须被赋过一次值,才可以使用。否则编译器会报错。注意若有多个out变量就需要每一个都至少在函数中赋值过一次!
我觉得至于多个返回值什么的,其实ref和out是一样的,ref在函数中可以得到多个值,并且被改变,而out也同样可以。个人觉着不算区别。
仅个人理解,有错望纠正!