gpt4 book ai didi

c# - 虽然我可以在方法中更改自定义对象的属性,但我无法更改 Vector3(Unity、C#)的属性

转载 作者:行者123 更新时间:2023-12-05 01:03:44 24 4
gpt4 key购买 nike

我是一名 Java 开发人员,Java 是按值传递的,但我们在方法中更改对象的更改属性。我无法很好地解释它,但这是一个链接: If Java is pass-by-value, then why can we change the properties of objects in methods?我也在用 C# 在 Unity 中开发游戏。我想知道上述情况在C#语言中也可以有效。我试过了,是的,它是有效的,而且是一样的。在尝试时,我自己定义了一个类并尝试更改其属性。之后,我尝试了 Vector3,但没有成功。

void Start()
{
Vector3 v = new Vector3(0,0,0);
setVector3(v);
Debug.Log(v);
}

void setVector3(Vector3 v)
{
v.x = 5;
}

虽然我们可以在C#的方法中改变对象的属性,但是为什么我不能改变Vector3的x属性(x属性可以这样设置,不是问题)?

最佳答案

因为Vector3 is a struct ,而不是。这使它成为一种值类型(与引用类型相反)。例如类似于 int

因此,在您的 setVector3 方法中,您正在修改该方法本地的 Vector3 对象的 copy

您可以明确地pass it by reference :

void setVector3(ref Vector3 v)

这将告诉编译器在方法框架中使用与调用框架中相同的值类型实例。

如果你传入一个 reference-type(定义为 class 的东西),那么默认情况下你会观察到你所期望的行为。该对象将存在于堆中,并且在整个堆栈中都是相同的对象引用。

关于c# - 虽然我可以在方法中更改自定义对象的属性,但我无法更改 Vector3(Unity、C#)的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73653218/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com