如何确定是复制还是引用值
本文关键字:引用 复制 何确定 | 更新日期: 2023-09-27 18:35:39
假设我们有一个像这样工作的程序:
namespace Example
{
class Program
{
static void Main(string[] args)
{
Storage MainStorage = new Storage();
PrintData Printer = new PrintData();
Printer.GetStorage(MainStorage);
}
}
class Storage
{
//Stores some data
}
class PrintData
{
Storage storage;
public void GetStorage(Storage storage)
{
this.storage = storage;
}
public void Print()
{
//Prints data
}
}
}
这只是一个例子,所以代码不会很完美,但我的问题是在这种情况下,GetStorage()
方法是复制MainStorage
对象还是引用它?
它只是一个示例,因此代码不会完美,但我的问题是在这种情况下,
GetStorage()
方法是复制MainStorage
对象还是引用它?
它创建对Storage
实例的引用的副本。在这种情况下,PrintData
中的字段将引用内存中与您分配给 MainStorage
的实例相同的实例。
您可以通过检查类型是 class
还是 struct
来检查赋值是否具有引用语义。 如果是值类型 ( struct
),则副本将具有值复制语义。
在此示例中,它获取引用的副本,而不是对象本身。
类始终通过引用进行复制。结构和枚举按值复制,除非您在方法参数中使用关键字 ref
。
字符串是类的特殊情况,是不可变的(无法更改),每当您修改它时,引用都会指向表示结果的新对象,因此,它实际上是值的副本。