C#中ref参数及out参数对比
2013-08-27 18:11
211 查看
ref 关键字和out关键字均会导致参数通过引用来传递(相同点1)。这是两者的共同点。
通过引用传递参数,会使方法中对参数所做的任何修改都将反映在该变量中。
两者还有一个共同点,那就是:若要使用 ref 参数或out参数,则方法定义和调用方法都必须显式使用 ref 关键字或out关键字(相同点2)。
那两者有什么不同点呢?
两者的不同点就是:传递到 ref 参数的参数必须最先初始化,而out参数在传递之前不需要显式初始化(不同点)。
下面来看个简单的例子,该实例包括两部分。
先给出第一部分代码,如下:
这部分代码运行后输出“1 0”。
因为ExpWithRef方法通过引用传递参数,所以执行完代码“ExpWithRef(ref a)”后,a的值被改变,变成了1。而ExpWithOutRef方法通过值传递参数,所以执行完代码“ExpWithOutRef(b)”后,b的值保持不变,仍为0。
另外,ExpWithRef方法通过ref引用传递参数,所以方法定义和调用方法都显式地使用了 ref 关键字,且实参a在函数调用前已被初始化。
下面给出第二部分实例代码:
这部分代码中,ExpWithOut方法通过out引用传递参数,所以参数a在方法调用前并没有初始化,而是在ExpWithOut方法内部进行初始化,并对其加1,函数调用返回后参数a的值变成了1(记住,这里是引用传递参数),所以最后的输出结果为“1”。
好了,就这些了。
通过引用传递参数,会使方法中对参数所做的任何修改都将反映在该变量中。
两者还有一个共同点,那就是:若要使用 ref 参数或out参数,则方法定义和调用方法都必须显式使用 ref 关键字或out关键字(相同点2)。
那两者有什么不同点呢?
两者的不同点就是:传递到 ref 参数的参数必须最先初始化,而out参数在传递之前不需要显式初始化(不同点)。
下面来看个简单的例子,该实例包括两部分。
先给出第一部分代码,如下:
static void Main(string[] args) { int a = 0; ExpWithRef(ref a); Console.WriteLine(a); int b = 0; ExpWithOutRef(b); Console.WriteLine(b); } private static void ExpWithRef(ref int x) { x = x + 1; } private static void ExpWithOutRef(int y) { y = y + 1; }
这部分代码运行后输出“1 0”。
因为ExpWithRef方法通过引用传递参数,所以执行完代码“ExpWithRef(ref a)”后,a的值被改变,变成了1。而ExpWithOutRef方法通过值传递参数,所以执行完代码“ExpWithOutRef(b)”后,b的值保持不变,仍为0。
另外,ExpWithRef方法通过ref引用传递参数,所以方法定义和调用方法都显式地使用了 ref 关键字,且实参a在函数调用前已被初始化。
下面给出第二部分实例代码:
static void Main(string[] args) { int a; ExpWithOut(out a); Console.WriteLine(a); } private static void ExpWithOut(out int x) { x = 0; x = x + 1; }
这部分代码中,ExpWithOut方法通过out引用传递参数,所以参数a在方法调用前并没有初始化,而是在ExpWithOut方法内部进行初始化,并对其加1,函数调用返回后参数a的值变成了1(记住,这里是引用传递参数),所以最后的输出结果为“1”。
好了,就这些了。
相关文章推荐
- C#中ref参数及out参数对比
- C# 参考之方法参数关键字:params、ref及out
- C# 参考之方法参数关键字:params、ref及out
- c# 方法参数(传值,传引用,ref,out,params,可选参数,命名参数)
- C#中ref、out类型参数的区别和params类型参数的用法
- c#.net中参数修饰符ref,out ,params
- C#之Action/Func/out/ref/params/类型参数约束
- C# 参考之方法参数关键字:params、ref及out
- C#返回多个参数 ref及out
- C# ref_out_params方法的参数_4种类型的参数
- 读<<CLR via C#>>总结(7) 以传引用的方式向方法传递参数---ref&out
- C#函数参数传送之out与ref的应用
- C#.NET学习笔记---C#中方法参数的传递方式: 值类型(默认),ref类型,out类型和params类型
- C# 参数-ref 参数、out 参数和 params type[] 参数数列(转)
- C#引用类型参数加ref或out与不加ref或out的区别
- C# 参考之方法参数关键字:params、ref及out
- c#高级参数关键字out、ref、params
- C# 参考之方法参数关键字:params、ref及out
- c# 方法参数(传值,传引用,ref,out,params,可选参数,命名参数)
- C# 参考之方法参数关键字:params、ref及out