引用类型与值类型有什么不同

问题:要求定义一个方法,接受一个int类型参数,要求方法返回后作为实参传递进来的变量值增加1。

思考一番 这还不简单,一顿操作:

 public static void point(int N)
        {
            N++;      

         }

结果发现不对 x的值没有变

 int a = 1;
 point(a);
 Console.WriteLine(a);//结果是1

这时我就想 如果有这样一个类:

class plus
    {
        private int n;
        public int N { get { return n; }set { n = value; } }

   }

现在要定义一个方法,用方法形参接受这个plus类型的参数 然后给他的N加1:

 public static void point1(plus p)
        {
            p.N++;
        }

然后在主方法内调用:

 plus p = new plus();

  p.N = 1;
  point1( p);
  Console.WriteLine(p.N );//结果是2

N竟然变了 这就是引用类型与值类型的区别。

当变量相互赋值时,值类型的变量直接拷贝了一份值。当变量离开作用域,就会从栈上弹出来。

而引用类型不会在堆中构造一个新的对象,而是只复制引用(当然另有方法可以拷贝一个新对象),使得被赋值的变量引用同一个对象。即使某个引用类型变量离开作用域不能被使用,但是堆中的对象不一定马上就被销毁了,因为有可能还有其他变量引用

1.值类型变量在作用域内结束时 系统会自动释放 ;而引用类型则靠GC
 2.继承不同  值类型继承于value Type而valueType 继承于System.object  引用继承于System.object

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值