params ref out 的使用
2010年06月24日
params 关键字可以指定在参数数目可变处采用参数的方法参数。
在方法声明中的 params 关键字之后不允许任何其他参数,并且在方法声明中只允许一个 params 关键字。
示例 :
字面意思比较难懂,所以看示例很有用。
// keywords_params.cs
using System;
class App
{
public static void UseParams( params object [] list)
{
for ( int i = 0 ; i 不能作为 ref 参数传递。
尽管 ref 和 out 在运行时的处理方式不同,但它们在编译时的处理方式是相同的。因此,如果一个方法采用 ref 参数,而另一个方法采用 out 参数,则无法重载这两个方法。例如,从编译的角度来看,以下代码中的两个方法是完全相同的。如果尝试这么做,将导致不能编译该代码。
如果一个方法采用 ref 或 out 参数,而另一个方法不采用这两类参数,则可以进行重载。
示例 :
按引用传递值类型是有用的,但是 ref 对于传递引用类型也是很有用的。这允许被调用的方法修改该引用所引用的对象,因为引用本身是按引用来传递的。
// keywords_ref.cs
using System;
class App
{
public static void UseRef( ref int i)
{
i += 100 ;
Console.WriteLine( " i = {0} " , i);
}
static void Main()
{
int i = 10 ;
// 查看调用方法之前的值
Console.WriteLine( " Before the method calling: i = {0} " , i);
UseRef( ref i);
// 查看调用方法之后的值
Console.WriteLine( " After the method calling: i = {0} " , i);
Console.Read();
}
}
/**/ /*
控制台输出:
Before the method calling : i = 10
i = 110
After the method calling: i = 110
*/
C# ref与out区别
在C# 中,既可以通过值也可以通过引用传递参数。通过引用传递参数允许函数成员更改参数的值,并保持该更改。若要通过引用传递参数, 可使用ref或out关键字。ref和out这两个关键字都能够提供相似的功效,其作用也很像C中的指针变量。它们的区别是:
1、使用ref型参数时,传入的参数必须先被初始化。对out而言,必须在方法中对其完成初始化。
2、使用ref和out时,在方法的参数和执行方法时,都要加Ref或Out关键字。以满足匹配。
3、out适合用在需要retrun多个返回值的地方,而ref则用在需要被调用的方法修改调用者的引用的时候。
注:在C#中,方法的参数传递有四种类型:传值(by value),传址(by reference),输出参数(by output),数组参数(by array)。传值参数无需额外的修饰符,传址参数需要修饰符ref,输出参数需要修饰符out,数组参数需要修饰符params。传值参数在方法调用过程中如果改变了参数的值,那么传入方法的参数在方法调用完成以后并不因此而改变,而是保留原来传入时的值。传址参数恰恰相反,如果方法调用过程改变了参数的值,那么传入方法的参数在调用完成以后也随之改变。实际上从名称上我们可以清楚地看出两者的含义--传值参数传递的是调用参数的一份拷贝,而传址参数传递的是调用参数的内存地址,该参数在方法内外指向的是同一个存储位置。
方法参数上的 ref 方法参数关键字使方法引用传递到方法的同一个变量。当控制传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。
若要使用 ref 参数,必须将参数作为 ref 参数显式传递到方法。ref 参数的值被传递到 ref 参数。
传递到 ref 参数的参数必须最先初始化。将此方法与 out 参数相比,后者的参数在传递到 out 参数之前不必显式初始化。
属性不是变量,不能作为 ref 参数传递。
如果两种方法的声明仅在它们对 ref 的使用方面不同,则将出现重载。但是,无法定义仅在 ref 和 out 方面不同的重载。
out
方法参数上的 out 方法参数关键字使方法引用传递到方法的同一个变量。当控制传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。
当希望方法返回多个值时,声明 out 方法非常有用。使用 out 参数的方法仍然可以返回一个值。一个方法可以有一个以上的 out 参数。
若要使用 out 参数,必须将参数作为 out 参数显式传递到方法。out 参数的值不会传递到 out 参数。
不必初始化作为 out 参数传递的变量。然而,必须在方法返回之前为 out 参数赋值。
属性不是变量,不能作为 out 参数传递。
发表评论
-
为什么不大愿意调用国内厂商提供的API
2012-01-20 09:45 556为什么不大愿意调用国 ... -
BIGWORLD问题集
2012-01-20 09:45 683BIGWORLD问题集 2010年11月07日 服务器问 ... -
编译 boost
2012-01-20 09:45 573编译 boost 2011年05月17日 ... -
linux&windows安装boost1.45
2012-01-20 09:45 732linux&windows安装boost1.45 2 ... -
CVS 版本控制环境配置指南
2012-01-20 09:45 618CVS 版本控制环境配置指 ... -
2010-11-30
2012-01-19 14:50 5122010-11-30 2010年11月30日 ... -
筹备计划
2012-01-19 14:50 683筹备计划 2011年08月27日 ... -
2011-10-8
2012-01-19 14:50 5402011-10-8 2011年10月08日 分享到: Q ... -
HTC Desire G7刷机
2012-01-17 04:34 901HTC Desire G7刷机 2011年10月07日 ... -
2011-8-4
2012-01-17 04:34 9602011-8-4 2011年08月04日 ... -
先人的DELPHI基础开发技巧2
2012-01-17 04:33 965先人的DELPHI基础开发技巧2 2011年02月28日 ... -
第五章: 基本I/O
2012-01-17 04:33 617第五章: 基本I/O 2011年04月21日 5.1 ... -
浅谈Asp程序的编写和调试
2012-01-16 03:26 665浅谈Asp程序的编写和调试 2010年03月08日 很多 ... -
牛X的黑客及联系方式-
2012-01-16 03:26 2400牛X的黑客及联系方式- 2010年05月22日 网名: ... -
KBS的BBS系统灌水脚本
2012-01-16 03:26 646KBS的BBS系统灌水脚本 20 ... -
理解 Flex itemRenderer - 内联渲染器
2012-01-16 03:26 496理解 Flex itemRenderer - 内联渲染器 2 ... -
flash/flex开源框架aswing教程1
2012-01-16 03:26 815flash/flex开源框架aswing教 ...
相关推荐
C#中ref,out和params有什么区别 out 关键字会导致参数通过引用来传递。这与 ref 关键字类似,不同之处在于 ref 要求变量必须在传递之前进行初始化。若要使用 out 参数,方法定义和调用方法都必须显式使用 out ...
// str is now “changed” } } 方法参数上的 out 方法参数关键字使方法引用传递到方法的同一个变量。ref可以把参数的数值传递
最近在写程序时遇到params,ref,out 参数问题。回头有自习看了看MSDN,才巩固了基础。现在和大家分享一下。paramsparams 关键字在方法成员的参数列表中使用,为该方法提供了参数个数可变的能力,它在只能出现一次...
Remoting和WebServiceRef, Out, Params的区别
本文主要讨论params关键字,ref关键字,out关键字。非常不错,具有参考借鉴价值,需要的朋友参考下吧
C#中有三个关键字-ref,out ,params,虽然本人不喜欢这三个关键字,因为它们疑似破坏面向对象特性。但是既然m$把融入在c#体系中,那么我们就来认识一下参数修饰符ref,out ,params吧,还有它们的区别。
5、使用ref关键字和out关键字都是通过引用传递参数,不同的是ref方式要求实参必须 在传递之前进行__________。而采用out方式时不要求在调用方法前对实参进行____ ______。 6、静态方法只能访问类中的 ________ 字段...
第7天 01复习 02方法的调用问题 03判断闰年 04方法概念 05方法练习 06方法的3个练习 07out参数 08使用out参数做登陆 09自己动手写tryparse 10ref参数 11、ref练习 12params可变参数 13、方法的重载 14、方法的递归 ...
8.3 使用ref和out参数 142 8.3.1 创建ref参数 142 8.3.2 创建out参数 143 8.4 计算机内存的组织方式 145 8.5 system.object类 147 8.6 装箱 147 8.7 拆箱 148 8.8 数据类型的安全转换 149 8.8.1 is操作符 ...
C# 中的yield、ref、out、params关键字理解.并有代码测试。 C#预处理指令(未做测试例子)。 对C# 中堆栈,堆,值类型,引用类型的理解。
定义方法的规范,以及方法的的调用参数(如:out参数,ref参数,params参数,方法的递归)-附有示例代码截图
1. C#语言特点 2. C#程序特点 3.枚举型与结构型的区别 3. 数据类型转换 4. break与continue 5. 访问修饰符 6. 类与对象 ...22. C#函数中无参数修饰符、out修饰符、params修饰符、ref修饰符的区别?
2.7 参数修饰符params、out和ref的区别 2.8 值类型和引用类型的区别 . 2.9 结构与类的区别 2.10 dispose()和close()、finalize()的区别 2.11 string和stringbuilder有什么区别 2.12 debug版本和...
2.7 参数修饰符params、out和ref的区别 2.8 值类型和引用类型的区别 . 2.9 结构与类的区别 2.10 dispose()和close()、finalize()的区别 2.11 string和stringbuilder有什么区别 2.12 debug版本和...
2.7 参数修饰符params、out和ref的区别 2.8 值类型和引用类型的区别 . 2.9 结构与类的区别 2.10 dispose()和close()、finalize()的区别 2.11 string和stringbuilder有什么区别 2.12 debug版本和...
2.7 参数修饰符params、out和ref的区别 2.8 值类型和引用类型的区别 . 2.9 结构与类的区别 2.10 dispose()和close()、finalize()的区别 2.11 string和stringbuilder有什么区别 2.12 debug版本和...
2.7 参数修饰符params、out和ref的区别 2.8 值类型和引用类型的区别 . 2.9 结构与类的区别 2.10 dispose()和close()、finalize()的区别 2.11 string和stringbuilder有什么区别 2.12 debug版本和...