一.ref和out的共同点
1.ref和out关键字都是指出一个值类型变量或是引用类型变量应该以引用方式传递。
2.尽管 ref 和 out 在运行时的处理方式不同,但它们在编译时的处理方式是相同的。因此,如果一个方法采用 ref 参数,而另一个方法采用 out 参数,则无法重载这两个方法,例如:从编译角度看下面两个方法是相同的,所以不能编译通过。
public void SampleMethod(ref int i) { }
public void SampleMethod(out int i) { }
3.二者都可以使方法返回多个值
二.ref和out的不同点
1.out 指定一个输出参数,被调用的方法可向其赋值,所以在参数传递时可以不初始化,但是ref在传递前必须被初始化
2.out 用于传出值,ref是双向的,即可以传入也可以传出
三.实例
class Program
{
static void Main(string[] args)
{
int result;
Console.WriteLine("请输入一个字符串,查看是否能转化成整数类型");
if (myTryParse(Console.ReadLine(), out result))
{
Console.WriteLine("转化成功,结果是{0}", result);
}
else
{
Console.WriteLine("转化失败,您的输入不能转化成整数类型");
}
Console.ReadKey();
}
/// <summary>
/// 试着转化字符串为int类型,如果转化成功返回true,
/// </summary>
/// <param name="str">要转化的字符串</param>
/// <param name="result">参数返回转换后的int</param>
/// <returns>是否转化成功,成功:true 失败:false</returns>
public static bool myTryParse(string str, out int result)
{
result = 0;
try
{
result = Convert.ToInt32(str);
return true;
}
catch (Exception ex)
{
return false;
}
}
public static int totol(int[] shu, out int maxNum, out int minNum)
{
int totol = 0;
maxNum =shu[0];
minNum =shu[0];
for (int i = 0; i < shu.Length; i++)
{
totol += shu[i];
if (maxNum < shu[i])
{
maxNum = shu[i];
}
if (minNum > shu[i])
{
minNum = shu[i];
}
}
return totol;
}
}
|