读经典——《CLR via C#》(Jeffrey Richter著) 笔记_引用类型和值类型(二)

【引用类型和值类型的区别】

//引用类型(由于使用了‘class’)
class SomeRef  { public Int32 x; }

//值类型(由于使用了‘struct’)
struct SomeVal { public Int32 x; }

static void ValueTypeDemo() {
    SomeRef r1 = new SomeRef(); //在堆上分配
    SomeVal v1 = new SomeVal(); //在栈上分配
    r1.x = 5; //提另指针
    v1x = 5; //在栈上修改
    Console.WriteLine(r1.x); //显示”5“
    Console.WriteLine(v1.x);//显示”5“
  
    SomeRef r2 = r1; //只复制引用(指针)
    SomeVal v2 = v1;//在栈中分配并复制成员
    r1.x = 8;//r1.x和r2.x都会改变
    v1.x = 9;//v1.x 会更改,但v2.x不变

    Console.WriteLine(r1.x);//显示"8"
    Console.WriteLine(r2.x);//显示"8"
    Console.WriteLine(v1.x);//显示"9"
    Console.WriteLine(v2.x);//显示"5"
}

【图解】

 

posted @ 2015-05-05 17:55  lishidefengchen  阅读(182)  评论(0编辑  收藏  举报