C#中参数前缀ref、out的使用
2012-07-27 13:52
295 查看
一、使用ref、out前缀与不使用前缀的区别
int intParam = 0;
object objParam = null;
public void method(int intParam,object objParam) //intParam是值类型形参, objParam是引用类型形参
{
//do something.....
}
public void Main()
{
method(intParam,objParam) ; //intParam是值类型实参, objParam是引用类型实参
}
不使用前缀时,向方法传递一个实参时,对应的形参会使用实参的一个副本来初始化。对于值类型的实参副本等于该值本身,而对于引用类型的实参副本则等于引用变量的值。 如果为一个形参附加了ref关键字,该参数就会成为实参的一个别名,而不再是实参的一个副本。
二、ref、out的区别
使用ref的参数必须先赋值,out的可以不初始化参数。其余的作用相同。
三、ref应用于引用类型的参数
对于引用类型的参数,加ref前缀,传递的是原引用变量的引用,如果你在方法体内对形参重新赋值,那么将影响到实参,即形参和实参的引用是同一地址;不加ref前缀,传递的是原引用变量的副本,即使你在方法体内对形参重新赋值,不影响实参,即形参和实参的引用是不同的。
示例:
int intParam = 0;
object objParam = null;
public void method(int intParam,object objParam) //intParam是值类型形参, objParam是引用类型形参
{
//do something.....
}
public void Main()
{
method(intParam,objParam) ; //intParam是值类型实参, objParam是引用类型实参
}
不使用前缀时,向方法传递一个实参时,对应的形参会使用实参的一个副本来初始化。对于值类型的实参副本等于该值本身,而对于引用类型的实参副本则等于引用变量的值。 如果为一个形参附加了ref关键字,该参数就会成为实参的一个别名,而不再是实参的一个副本。
二、ref、out的区别
使用ref的参数必须先赋值,out的可以不初始化参数。其余的作用相同。
三、ref应用于引用类型的参数
对于引用类型的参数,加ref前缀,传递的是原引用变量的引用,如果你在方法体内对形参重新赋值,那么将影响到实参,即形参和实参的引用是同一地址;不加ref前缀,传递的是原引用变量的副本,即使你在方法体内对形参重新赋值,不影响实参,即形参和实参的引用是不同的。
示例:
using System; using System.Collections.Generic; using System.Text; namespace Parameters { class WrappedInt { public int number; } class Pass { public static void Value(ref int param) { param = 10; } //使用引用类型的参数,方法体内不对参数的引用做任何修改 public static void Reference(WrappedInt param) { param.number = 50; } //使用加了ref修饰符的引用类型的参数,方法体内对参数的引用做了修改 //由于使用了ref修饰符,所以将影响到实参。 public static void refReference(ref WrappedInt param) { WrappedInt wi = new WrappedInt(); wi.number = 100; param = wi; } //使用未加ref修饰符的引用类型的参数,方法体内对参数的引用做了修改 public static void NorefReference(WrappedInt param) { WrappedInt wi = new WrappedInt(); wi.number = 100; param = wi; } } class Program { static void DoWork() { WrappedInt reParam = new WrappedInt(); Console.WriteLine(reParam.number); Pass.Reference(reParam); //使用引用类型变量,实参和方法体内的形参引用的是同一个地址。 Console.WriteLine(reParam.number); Pass.NorefReference(reParam); //未使用ref修饰符,虽然在方法体内修改了形参的引用,但不影响实参reParam Console.WriteLine(reParam.number); Pass.refReference(ref reParam); //由于使用了ref修饰符,在方法体内修改了形参的引用将影响到实参reParam。 Console.WriteLine(reParam.number); } static void Main(string[] args) { try { DoWork(); } catch (Exception ex) { Console.WriteLine(ex.Message); } } } }
相关文章推荐
- C#中参数前缀ref、out的使用
- C#方法参数传递-同时使用ref和out关键字
- C# 中的四种参数的使用方法(一般参数,ref 参数,out参数,参数数列)
- C# 下ref和out 参数使用
- C# 下ref和out 参数使用
- C#之高级参数 ref,out,params的使用
- C#方法参数传递-同时使用ref和out关键字
- c#中ref和out参数使用时需要注意的问题
- 在 C# 异步方法中使用 out/ref 参数机制
- C#中ref和out参数使用时需要注意的问题
- C# 下ref和out 参数使用
- C#Trick&Tip: 使用 ref 与 out 传递参数的区别
- c#中ref和out参数使用时需要注意的问题_百度文库
- C#中out、ref、params参数的使用
- C#中引用参数ref 、out的使用区别
- C#:ref(引用传递参数)和out(输出参数))
- 用MSIL剥开C#的外衣(一):方法参数ref、out、params和lock、for和foreach关键字
- 史上最全的CSS hack方式一览 jQuery 图片轮播的代码分离 JQuery中的动画 C#中Trim()、TrimStart()、TrimEnd()的用法 marquee 标签的使用详情 js鼠标事件 js添加遮罩层 页面上通过地址栏传值时出现乱码的两种解决方法 ref和out的区别在c#中 总结
- C#中使用ref 和 out 的一点认识
- C# 参考之方法参数关键字:params、ref及out