C# 点点滴滴: out和ref

  用c#很长一段时间了,不过基本是啥都不会,当C用的,作为写单片机的,还是真心觉得C比较亲切,呵呵。

  不过总是要进步啊,慢慢积累呗,这次是写一个CAN的上位机模板出来,以后的项目就要彻底告别串口上位机了。

  先说说这个out和ref,就是C语言里面的指针型函数参数。

// C语言中,传址传递
void Test_Function( int * temp )
{
     *temp = 100;    
}

  今天这样用到C#上,果然悲剧,必须使用ref或out才可以。

  先百度一下区别先:

ref是传递参数的地址,out是返回值,两者有一定的相同之处,不过也有不同点。

使用ref前必须对变量赋值,out不用。

out的函数会清空变量,即使变量已经赋值也不行,退出函数时所有out引用的变量都要赋值,ref引用的可以修改,也可以不修改。 

  C# 例程:

// C#
// out
void Test_Function_1( out int temp )
{
      // 这里temp已经被清空了,即不能这里直接用temp给别的变量赋值
      // 离开函数前temp必须赋值
      temp = 100;
}

// 调用
// 可以不需要初始化
int temp_1;
Test_Funton_1(out temp_1);
// C#
// ref
void Test_Function_2( ref int temp )
{
      // 这里temp已经在调用之前被初始化过了
      // 离开函数前temp可以不修改,也可以修改
      temp = 100;
}

// 调用
// 必须初始化
int temp_2 = 0;
Test_Funton_2(ref temp_2);

------------------------------------------------------------------------------------------

作者:庞辉

出处:http://www.cnblogs.com/pang123hui/

本文基于署名 2.5 中国大陆许可协议发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名庞辉(包含链接).

posted @ 2013-01-05 12:45  云说风轻  阅读(391)  评论(0编辑  收藏  举报