c#中out和ref的用法与区别
2009-11-10 15:31
405 查看
一、相同之处
ref和out都对函数参数采用引用传递形式——不管是值类型参数还是引用类型参数,并且定义函数和调用函数时都必须显示生命该参数为ref/out形式。两者都可以使函数传回多个结果。
二、不同之处
两种参数类型的设计思想不同,ref的目的在于将值类型参数当作引用型参数传递到函数,是函数的输入参数,并且在函数内部的任何改变也都将影响函数外部该参数的值;而out的目的在于获取函数的返回值,是输出参数,由函数内部计算得到的值再回传到函数外部,因此必须在函数内部对该参数赋值,这将冲掉函数外部的任何赋值,使得函数外部赋值毫无意义。
具体表现为:
1、out必须在函数体内初始化,这使得在外面初始化变得没意义。也就是说,out型的参数在函数体内不能得到外面传进来的初始值。
2、ref必须在函数体外初始化。
3、两者在函数体内的任何修改都将影响到函数体外面。
三、例子
using System;
namespace ConsoleApplication1
{
class C
{
public static void reffun(ref string str)
{
str += " fun";
}
public static void outfun(out string str)
{
str = "test"; //必须在函数体内初始, 如无此句,则下句无法执行,报错
str += " fun";
}
}
class Class1
{
[STAThread]
static void Main(string[] args)
{
string test1 = "test";
string test2; //没有初始
C.reffun( ref test1 ); //正确
C.reffun( ref test2 ); //错误,没有赋值使用了test2
C.outfun( out test1 ); //正确,但值test无法传进去
C.outfun( out test2 ); //正确
Console.Read();
}
}
}
(注:此文转,具体出处不知,稍作修改。)
ref和out都对函数参数采用引用传递形式——不管是值类型参数还是引用类型参数,并且定义函数和调用函数时都必须显示生命该参数为ref/out形式。两者都可以使函数传回多个结果。
二、不同之处
两种参数类型的设计思想不同,ref的目的在于将值类型参数当作引用型参数传递到函数,是函数的输入参数,并且在函数内部的任何改变也都将影响函数外部该参数的值;而out的目的在于获取函数的返回值,是输出参数,由函数内部计算得到的值再回传到函数外部,因此必须在函数内部对该参数赋值,这将冲掉函数外部的任何赋值,使得函数外部赋值毫无意义。
具体表现为:
1、out必须在函数体内初始化,这使得在外面初始化变得没意义。也就是说,out型的参数在函数体内不能得到外面传进来的初始值。
2、ref必须在函数体外初始化。
3、两者在函数体内的任何修改都将影响到函数体外面。
三、例子
using System;
namespace ConsoleApplication1
{
class C
{
public static void reffun(ref string str)
{
str += " fun";
}
public static void outfun(out string str)
{
str = "test"; //必须在函数体内初始, 如无此句,则下句无法执行,报错
str += " fun";
}
}
class Class1
{
[STAThread]
static void Main(string[] args)
{
string test1 = "test";
string test2; //没有初始
C.reffun( ref test1 ); //正确
C.reffun( ref test2 ); //错误,没有赋值使用了test2
C.outfun( out test1 ); //正确,但值test无法传进去
C.outfun( out test2 ); //正确
Console.Read();
}
}
}
(注:此文转,具体出处不知,稍作修改。)
相关文章推荐
- c#中out、ref和params的用法与区别
- c#中out与ref的用法与区别
- c#中out与ref的用法与区别
- c#中out、ref和params的用法与区别
- c#中out、ref和params的用法与区别
- C#中ref、out类型参数的区别和params类型参数的用法
- c#中out与ref的用法与区别
- C#中ref、out类型参数的区别和params类型参数的用法
- c#中out与ref的用法与区别
- c#中out、ref和params的用法与区别
- c#中的 ref 与 out 区别及其用法
- c#中out、ref和params的用法与区别
- c#中out与ref的用法与区别
- c#中out、ref和params的用法与区别
- c#中out、ref和params的用法与区别
- c#中out、ref和params的用法与区别 params可以传不定长的参数
- C#中按引用传递与按值传递的区别,以及ref与out关键字的用法详解
- 史上最全的CSS hack方式一览 jQuery 图片轮播的代码分离 JQuery中的动画 C#中Trim()、TrimStart()、TrimEnd()的用法 marquee 标签的使用详情 js鼠标事件 js添加遮罩层 页面上通过地址栏传值时出现乱码的两种解决方法 ref和out的区别在c#中 总结
- C#中ref和out关键字的区别?
- 在c#中ref 和 out关键字的联系和区别