ref 和 out 是C#开发中经常用到的两个关键字,但是很多人没有搞清楚这两个关键字的具体区别,下面我们来说一下这两个关键的区别。
零、 ref 与 out 的异同
- 相同:
- 都是按地址传递;
- 使用后都将改变原来参数的值;
- 编译时处理方式相同;
- 属性不能作为参数传递。
- 不同:
- ref 将参数值传进方法, out 无法将参数值传入方法;
- ref 传入参数前必须先初始化, out 不必在参数传输方法前初始化,但必须在方法中初始化;
- ref 用在需要被调用的方法修改调用者的引用的时候, out 用在需要返回多个结果的地方。
一、代码演示
ref 将参数值传进方法
static void Main(string[] args) { //初始化 int number = 50; Console.WriteLine("调用方法前 number 值:" + number); RefFunction(ref number); Console.WriteLine("调用方法后 number 值:" + number); Console.Read(); } // 传入的参数值是 50 ,方法中使用的num值也是50 static void RefFunction(ref int num) { num = num / 2; }
输出结果如下图所示:
out 无法将参数值传入方法
static void Main(string[] args) { int number = 50; Console.WriteLine("调用方法前 number 值:" + number); OutFunction(out number); Console.WriteLine("调用方法后 number 值:" + number); Console.Read(); } // 无法将的参数值50传入 ,但是必须在方法中初始化 static void OutFunction(out int num) { //初始化 num = 120; num = num / 2; }
输出结果如下图所示:
小拓展:如果一个方法采用ref或out参数,而另一个方法不采用这两类参数,则可以进行重载。如下代码示例就是重载,可以通过编译:
static void Function(out int num) { num = 120; num = num / 2; } static void Function(int num) { num = num / 2; }