1共同点
共同点:都是传递变量地址给方法。
如下测试程序:
using System;
namespace ConsoleApp9
{
class Program
{
static void Main(string[] args)
{
int x = 1;
int y = 2;
Console.WriteLine("x = {0}", x);
Console.WriteLine("y = {0}", y);
Program temple = new Program();
temple.testMyMethod(ref x, out y);
Console.WriteLine("x = {0}", x);
Console.WriteLine("y = {0}", y);
}
public void testMyMethod(ref int x, out int y)
{
x = 10;
y = 20;
}
}
}

2.不同点
2.1传递的变量是否先进行初始化
- ref型传递变量前,该变量必须进行初始化。
- out型传递变量前,该变量可以不用进行初始化。
如下: 在主函数中如此调用testMyMethod(ref i),不可以。 在主函数中如此调用testMyMethod(out i),可以。

2.2 是否可以在函数内部使用
出错  没有出错  没有出错 
ref传进去的参数在函数内部可以直接使用,而out不可,因为out会清空变量,所以在使用out型变量时要赋值后才能使用。
2.3 函数内部的变量是否需要修改
ref传进去的参数在函数内部可以不被修改,但out必须在离开函数体前进行赋值。

作者:Beyong 出处:Beyong博客 github地址:https://github.com/beyong2019
本博客中未标明转载的文章归作者Beyong有,欢迎转载,但未经作者同意必须保留此段声明,且在文章明显位置给出原文连接,否则保留追究法律责任的权利。
|