【发布时间】:2012-03-04 07:53:29
【问题描述】:
我最近尝试为 Vector2 字段创建一个属性,只是意识到它没有按预期工作。
public Vector2 Position { get; set; }
这使我无法更改其成员的值 (X & Y)
查找这方面的信息,我读到为Vector2 结构创建属性仅返回原始对象的副本而不是引用。
作为一名 Java 开发人员,这让我很困惑。
C#中的对象什么时候传值,什么时候传引用?
所有的struct对象都是传值吗?
【问题讨论】:
-
你需要展示更多。这应该可以按您的预期工作。
-
a
struct是一个值类型 - 所以它是按值传递的 - 另一方面,对于每个引用类型(即类),默认情况下传递引用的副本(引用本身是按值传递) -
@b1naryj 堆栈与堆部分是一个实现细节,几乎总是一种无益的思考方式。
-
@b1naryj 没有人会错过,因为它不存在:
class Foo { Vector2 x; }- 现在结构值x分配在堆上,而不是在堆栈上。 -
结构是按值传递的。正如您所发现的,制作可变结构是一种“最糟糕的做法”,因为这样做非常令人困惑。使结构不可变值,就像整数是不可变值一样。
标签: c# struct pass-by-value