C# 引用类型是对象吗?

C# 引用类型是对象吗?,c#,reference,types,C#,Reference,Types,在我之前的问题(关于向ArrayList添加项目)中,一张海报写道“引用已经是一个对象”——它的含义是什么?我不明白。我认为引用只是我可以传递的对象的地址: object X=5; object A=X; //here I am assigning reference to X so both are pointing to copy of 5 同样在ArrayList示例中,它实际上存储引用..但我再次被注释“System.Object”引用类型弄糊涂了。这是什么意思 请举一些简单的例子,

在我之前的问题(关于向ArrayList添加项目)中,一张海报写道“引用已经是一个对象”——它的含义是什么?我不明白。我认为引用只是我可以传递的对象的地址:

object X=5;

object A=X; //here I am assigning reference to X so both are pointing to copy of 5
同样在ArrayList示例中,它实际上存储引用..但我再次被注释“System.Object”引用类型弄糊涂了。这是什么意思


请举一些简单的例子,我将不胜感激。我确实理解值类型和ref.types之间的区别,但是这是我无法理解的,尽管我知道它是有效的。

第一行是一个装箱操作,它创建整数5的一个装箱副本。对这个新对象的引用存储在X中


在第二行中,引用的值(大致上是地址,但地址和引用在逻辑上不同)被复制到中,因为这只是一个“ldloc,stloc”副本。在这个场景中只有一个对象;在第一行中创建的装箱对象。

第一行是一个装箱操作,用于创建整数5的装箱副本。对这个新对象的引用存储在X中


在第二行中,引用的值(大致上是地址,但地址和引用在逻辑上不同)被复制到中,因为这只是一个“ldloc,stloc”副本。在这个场景中只有一个对象;在第一行中创建的已装箱对象。

您在代码中所做的是采用值类型并将其“装箱”,因此现在它是堆上包含值“5”的引用类型。我建议您首先尝试了解C#中的值/引用类型可变/不可变,以及装箱/拆箱

这里有一个很好的链接可以帮助您开始:

Jon Skeet的书《C#depth》在这方面也做得很好(第2.3.4节)


希望这会有所帮助。

您在代码中所做的是采用值类型并将其“装箱”,因此现在它是堆上的一个引用类型,其中包含值“5”。我建议您首先尝试了解C#中的值/引用类型可变/不可变,以及装箱/拆箱

这里有一个很好的链接可以帮助您开始:

Jon Skeet的书《C#depth》在这方面也做得很好(第2.3.4节)


希望能有帮助。

你到底在问什么?System.Object==Object。就像System.Int32==int。你到底在问什么?System.Object==Object。就像System.Int32==int一样。