数据类型

我将数据分为两类,一类是值类型的,另一类是引用类型的。


值类型

因为对于值类型的数据,定义它的变量和它实际的值是放在一起的,应该都是存放在栈里。值类型的变量存放的数据量小,生产出它来,也不费劲,可以很快的销毁它。下次要使用时,大不了就再生产一个,反正也不费劲。所以,应该将他们存放在栈里。

比如说:int  i =123;



引用类型

在我看来,除了值类型的数据不需要指针,其它类型数据都需要指针,我管它们统一叫做引用类型的数据。假设它的类型为XXX,我定义一个XXX类型的变量c,初始值null。

  XXX   c=null 

这时候c还没有值,但是即使c有了值,值也不存放在栈里,而是存放在其它地方。下面是c的不是null的情况。

     由上可知,对于引用类型的数据,代表它的变量和实际的值是分开的。而c的作用就相当于一根绳子,我们可以通过它找到对象本身,因为c里存放的就是存有数据的对象的地址。其它c的作用就是指针,这和c++里的指针是一回事。因为c++不是面向对象的语言,没有类,接口等这些内容。c#在C++的基础上,加上了面向对象的概念,但它还是沿用了指针这种存储和使用数据的方式。

     那么右边这个矩形代表的是什么区域呢,很多人肯定认为肯定是“堆区”,那可不一定?

情况一:数据放在堆区。

      class类型,先定义这个类,才能使用:

class Dog

{

private string name;

private string furcolor;

}

Dog  dog=new Dog()




情况二:数据放在数据区(datasegment)。

    string是具有值类型特点的特殊的引用类型。

    string a="hello"


    除了string类型,还有一种情况,就是用static定义的变量或方法,数据也是放在datasegment。

    在这里多说一句,单例模式,就是因为将自己的成员变量和GetInstance()方法都声明为static类型,才能实现单例的效果。

情况三:数据放在代码区(codesegment)。

    我只知道 方法应该是放在代码区里。


    以上都是个人的理解,图片是我本人自己画的。希望能够对您有一点点的帮助。鉴于个人能力有限,错误之处,望指正。




评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值