点点滴滴

平凡.NET之路

导航

方法参数传递对象时声明选项的注意问题

方法参数可以有以下几种选项限定

ref
out
params

params没什么好说的,String.Format方法是个典型现成的例子;
ref?好像也没什么,不就是传递引用嘛,大家应该都知道,当传递对象参数时默认是传递引用的,是不是说当参数为对象时,写不写ref都是一样的,out好像没怎么用过,呵呵:

public class A
{
   
public int num;
}


public class B
{
   
public static void SetA1(A a)
   
{
       
if (a == nullreturn;
       a.num 
= 1;
   }
 
   
public static void SetA2(A a)
   
{
       a 
= new A();
       a.num 
= 1;
   }
 
   
public static void SetA3(ref A a)
   
{
       a 
= new A();
       a.num 
= 1;
   }
 
   
public static void SetA4(out A a)
   
{
       a 
= new A();
       a.num 
= 1;
   }
 
}


示例1:

A clsA=new A();
clsA.num
=0;
B.SetA1(clsA);
MessageBox.Show(clsA.num.ToString()); 
//num是0还是1???

 

示例2:

A clsA = null;
B.SetA2(clsA);
MessageBox.Show(clsA.num.ToString()); 
//is work ?呵呵,当然不,注意clsA还是null

示例3:
//要想按示例2的方式调用,ref就有用了

A clsA = null;
B.SetA3(
ref clsA);
MessageBox.Show(clsA.num.ToString()); 
// OK!

 

示例4:

//按示例2的方式调用,用out也可以,区别在哪呢?
A clsA; //呵呵,编译器是不会报告“使用了未赋值的局部变量”的,不过SetA4就有相应的要求了
B.SetA4(out clsA);
MessageBox.Show(clsA.num.ToString()); 

 

 
 
 

posted on 2005-08-15 10:10  wny  阅读(223)  评论(0)    收藏  举报