引用变量和对象之间的实际差异是什么

时间:2013-08-20 17:53:39

标签: c# .net class object

我一直在阅读很多,现在我真的很困惑。考虑一个普通的实例化:

Sampleclass  instance1  = new Sampleclass();

经过大量阅读后,我发现instance1是一个存储在堆栈中的引用变量,它包含存储在堆中的对象数据的内存地址。

如果这是正确的那么对象在哪里? instance1也是一个对象。有时我只看到new Sampleclass()这样的声明。这对于对象实例化是否足够?

4 个答案:

答案 0 :(得分:7)

instance1是一个变量。

因为它的类型是引用类型,所以它是对存在于堆上的对象实例的引用。

new SampleClass()是一个构造函数调用,它在堆上创建一个新对象并返回对它的引用。

答案 1 :(得分:1)

instance1包含引用的副本,该副本指向创建新的objet Sampleclass()的内存。令人困惑的是,instance1仅仅是一个引用的副本,它与引用引用(C#引用)不同,它可能会让你感到困惑,因为它让我很困惑。

答案 2 :(得分:1)

表达式new Sampleclass()创建一个对象。它还有一个,它是指向该对象的指针。您可以使用此指针执行某些操作,例如将其存储在变量中(例如Sampleclass instance1 = new Sampleclass();),或者您可以忽略它。

为什么要创造并忽略它?因为它的构造函数可能具有有益的副作用,例如。

答案 3 :(得分:0)

1)样本类(类型)>容器类型

2)instance1(Identifier)>用户友好的参考名称(01010101010)存储在内存(堆)中的数据和“instance1”本身存储在堆栈中的参考号(01010101010)

3)=(操作员)>将左侧值设为右侧

4)new(关键字)>购买存储数据的新空间

5)Sampleclass(); (构造函数)>制作Type“Sampleclass”的副本并存储在新购买的空间中(这实际上是一个对象或实例),并通过其名称“instance1”访问它,因为“instance1”知道堆内存中存储数据的实际位置。