A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 马毅 中级黑马   /  2012-12-19 22:34  /  1406 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

一. 值类型和引用类型
      值类型和引用类型的区别在于在内存中的存储方式,值类型存储在堆栈上,而引用类型存储在托管堆上,例如:
  1. //因为int是值类型,所以一下代码会在内存中创建两个位置存储两个10
  2. int i = 10;
  3. int j =i;
复制代码
  1.     //而以下代码,由于Class是引用类型,所以只在内存中开辟了一块区域,而有两个(cc和ccc)指向它的引用
  2.     class Program
  3.     {
  4.         static int i = 10;
  5.         static void Main(string[] args)
  6.         {

  7.             C1 cc = new C1();
  8.             C1 ccc = cc;
  9.         }
  10.     }
  11.     class C1
  12.     {
  13.            int val;
  14.     }
复制代码
      所以当有如下代码:
  1. cc.val = 30;
  2. ccc.val = 50;
复制代码
      当执行上一句的时候,cc和ccc的val值都是30,下面一句执行之后都会变成50,这点注意区别。
值类型
sbyte short intlong byte
ushort uintulong float double
decimal book char struct
引用类型
Object,string


      需要注意的是bool,char还有结构体都是值类型,string是较为特殊的一种引用类型,所以string被分配在托管堆上,而不是堆栈上,但string类型一旦被创建,则不可更改,这点和其他引用类型不同,所以对其的修改都是创建一个新的string,而把对原来的引用更新到指向新的这个,例如:
  1.             string s1 = "abcde";
  2.             string s2 = s1;//此时si,s2指向同一个string
  3.             s2 = "ABCDE";//s2指向“ABCDE”,而此时si指向原来的“abcde”
复制代码
PS:注意,char类型有单引号引起来,而string是双引号
其他C#基础请看这里

      

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

1 个回复

倒序浏览
值得学习ing!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马