我被告知当你将一个Object传递给一个方法时, 它是通过“价值”传递的。我做了一点测试来检查它:
Point p = new Point(1, 1);
Circle c = new Circle(p);
p.x = 999;
Console.WriteLine(c.p.x);
上面的代码打印“999”,但我认为该对象被复制到方法
我被告知,如果你没有使用“ref”(或“out”),那么方法得到的值为
对象。
有人能说清楚吗?
谢谢,
socksocket
答案 0 :(得分:3)
假设Point
被声明为类,而不是p
本身被复制,则复制引用到p
。所以它仍然是通过价值。您传递了引用的值。
当说Point p = new Point(1, 1);
(并且如果point是引用类型)时,可能会认为它是包含Point
的变量,但实际上它是一个包含对{{1}的引用的变量存储在其他地方。
答案 1 :(得分:1)
C#是按值传递 - 参考值是在正常情况下传递的,即。 (这意味着它是对同一对象的新引用)
答案 2 :(得分:1)
Point
是结构,因此通过值传递。
答案 3 :(得分:1)
在.NET中,有两类类型,引用类型和值类型。
结构是值类型,类是引用类型。
一般的不同是引用类型存在于堆上,而值类型生活在内联中,也就是说,只要定义了变量或字段。
包含值类型的变量包含整个值类型值。对于结构,这意味着变量包含整个结构及其所有字段。
包含引用类型的变量包含指针或引用到内存中实际值所在的其他位置。
这有一个好处,首先是:
在内部,引用类型被实现为指针,并且知道并且知道变量赋值如何工作,还有其他行为模式:
声明变量或字段时,这两种类型的区别如下: