有人告诉我,当您将对象传递给方法时,它是“按值”传递的。我做了一个小测试来检查它:
Point p = new Point(1, 1);
Circle c = new Circle(p);
p.x = 999;
Console.WriteLine(c.p.x);
上面的代码打印“999”,但我认为对象被复制到
我被告知的方法,如果你不使用“ref”(或“out”),该方法将获取
对象的值。
有人可以告诉我吗?
谢谢,
插座
有人告诉我,当您将对象传递给方法时,它是“按值”传递的。我做了一个小测试来检查它:
Point p = new Point(1, 1);
Circle c = new Circle(p);
p.x = 999;
Console.WriteLine(c.p.x);
上面的代码打印“999”,但我认为对象被复制到
我被告知的方法,如果你不使用“ref”(或“out”),该方法将获取
对象的值。
有人可以告诉我吗?
谢谢,
插座
假设Point
被声明为类,而不是p
自身被复制,引用被p
复制。所以它仍然是按值传递。您传递引用的值。
当说Point p = new Point(1, 1);
(如果 point 是引用类型)时,人们可能会认为它是一个包含 a 的变量Point
,但实际上它是一个包含对 a 的引用的变量,该引用Point
存储在其他地方。
C# 是按值传递的——参考值在正常情况下传递,也就是说。(这意味着它是对同一对象的新引用)
Point
是结构,所以按值传递。
在 .NET 中,有两类类型,引用类型和值类型。
结构是值类型,类是引用类型。
一般的不同是引用类型存在于堆上,而值类型存在于内联,也就是说,无论它是你的变量或字段被定义的地方。
包含值类型的变量包含整个值类型值。对于结构,这意味着变量包含整个结构及其所有字段。
包含引用类型的变量包含一个指针,或对内存中实际值所在的其他位置的引用。
这有一个好处,首先是:
在内部,引用类型被实现为指针,并且知道并知道变量赋值是如何工作的,还有其他行为模式:
当您声明变量或字段时,这两种类型的区别如下: