传值还是传参(一)

我对参数传递的方式的理解:

  • 对于值类型来说,参数以传值来传递,这种方式没有人会感到疑惑.
  • 对于引用类型来说,就比较困难.

自己写了一段小代码来帮助自己理解,如下:       

using System; <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

public class ConsoleTest

{

     public static void Main()

     {

         Test first = new Test();

         first.Print();

    

         Change(first);

 

         if(first == null)

            Console.WriteLine("Sorry,first is changed by Change method");

            else

               first.Print();

     }

 

     public static void Change(Test o)

     {

         o.Name = "It's Changed String";

         o = null;

     }

}

 

public class Test

{

     private String _name = "It's a test string";

    

     public String Name

     {

        get{ return _name;}

        set{ _name = value;}

     }

 

     public void Print()

     {

     Console.WriteLine(_name);

     }

}
执行结果:
It's a test string
It's Changed String

结论:
1:对于值类型的参数来说,传递的是值的拷贝.
2:对于引用类型的参数来说,传递的是引用本身的拷贝.这意味这参数引用的对象变了,却不影响传递给此参数的变量所引用的对象.如上所示,尽管参数变量o被改变成引用一个不存在的对象,但first仍然引用的是Test的一个实例对象,所以不会出现Sorry,first is changed by Change method字符串.

BTW:有时间还得请教Meyer关于广义接口与interface的区别.wink_smile.gifwink_smile.gif

转载于:https://www.cnblogs.com/iouniuniu/archive/2004/03/26/4290.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值