寻求一个真真能解释"out与ref的区别"的答案

ABC123CBA321 2009-04-19 10:58:20
网上看了许多关于"out与ref的区别"的文章, 感觉都理解得不够透彻, 说什么"使用ref关键字时, 传入的参数必须先被初始化; 使用out关键字时, 必须在被函数体内完成其初始化" 这些都是属于编码写法上的区别, 我想寻求一个本质上的区别, 到底有什么工作是out能做的, 而ref却做不了的. 又或者是ref能做的, 而用out却做不了的...
如果用out写出的任何程序都能用ref完成, 那么这两个东西还有什么区别? 倒不如C#就用一个out算了, 这么麻烦还要搞出一个ref来多余!

请大家写出一个例子:
用out写一个函数, 要求得出的结果只能用out实现, 而用ref却无法实现! 又或者是用ref能实现的程序用out却无法实现!

谢谢大家, 60分寻求这样的一个例子, 请高手们帮帮帮忙!
...全文
133 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
rczjp 2009-04-19
  • 打赏
  • 举报
回复
out 是传出 所以需要对其参数赋值

ref 是传进 可以不对参数赋值,不过在调用的时候还是需要对参数赋值,结果优先取决于方法里参数的赋值,如果方法里没有赋值结果就是调用的时候的参数赋的值
  • 打赏
  • 举报
回复
只知道 ref传入引用 out传出
ws_hgo 2009-04-19
  • 打赏
  • 举报
回复
http://blog.csdn.net/ws_hgo/archive/2009/04/11/4064487.aspx
ws_hgo 2009-04-19
  • 打赏
  • 举报
回复
 class Program
{
//使用out后必须对变量赋值
public void TestOut(out int x, out int y)
{
x = 1;
y = 2;
}
//此时传进来的值分别为x1:10,y1:11,输出之后的x1的值为2

public void TestRef(ref int x, ref int y)
{
//引用剪剪那句话传进来的是猪,出来的可能是头牛(很精辟!)
x = 2;

}
static void Main(string[] args)
{
int x;
int y;
Program P1 = new Program();
P1.TestOut(out x,out y);
Console.WriteLine("x={0},y={1}", x, y);
//在使用之前ref必须对变量赋值
int x1 = 10;
int Y1 = 11;
P1.TestRef(ref x1,ref Y1);
Console.WriteLine("x1={0},y1={1}", x1, Y1);
}
}
liujun_wangyi 2009-04-19
  • 打赏
  • 举报
回复
你去看看msdn
gomoku 2009-04-19
  • 打赏
  • 举报
回复
有一点你是对的,它们本质上没有区别 - ref int和out int编译成il代码后都是Int32& i,只不过编译器会对后者加上一个说明性的[Out]属性。

但在编程上,它们却提供了很重要的指示性的作用。程序员看到ref和out就可以非常清晰的知道变量是用来传入传出,或仅仅是传出的,是调用着初始化还是被调用者初始化。

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧