我将数据分为两类,一类是值类型的,另一类是引用类型的。
值类型
比如说: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"
在这里多说一句,单例模式,就是因为将自己的成员变量和GetInstance()方法都声明为static类型,才能实现单例的效果。
情况三:数据放在代码区(codesegment)。
我只知道 方法应该是放在代码区里。
以上都是个人的理解,图片是我本人自己画的。希望能够对您有一点点的帮助。鉴于个人能力有限,错误之处,望指正。