gpt4 book ai didi

c# - XNA 的 Vector2 类,属性在尝试更改其值时返回错误

转载 作者:行者123 更新时间:2023-12-02 05:40:02 26 4
gpt4 key购买 nike

我将首先用一些代码来说明我的问题:

class ExampleClass
{
private Vector2 _myVector;

public Vector2 MyVectorProperty { get { return _myVector; } set { _myVector = value; } }

private void MyMethod()
{
_myVector = Vector2.Zero; // Setting to zero

MyVectorProperty.X = 5; //Cannot modify the expression because it is not a variable (returns an error)

_myVector.X = 5; //Works fine!
}
}

如您所见,在尝试使用该属性更改向量上 X 和 Y 的值时,出现错误“无法修改表达式,因为它不是变量”。我不确定为什么会发生这种情况,而且在网上也没有任何运气,我想知道为什么会这样,以及如何(如果)解决它?

另一个子问题,在它们所属的类中工作时使用公共(public)属性或私有(private)/ protected 字段是否是良好的编程习惯?

最佳答案

你应该庆幸编译器不允许你这样做,否则你会对丢失的操作结果感到非常惊讶。

  • MyVectorProperty 是属性 - 这意味着获取值是调用返回值的函数(类似于 this.get_MyVectorProperty())。
  • 由于 MyVectorProperty 的类型是 Vector2,它是结构体,这意味着 get_... 函数返回的值是值的副本,而不是像它那样的引用以普通类为例。
  • 更改上述副本的字段 X 只会更改值副本中的 X,并且由于该值的副本未分配给任何内容,因此它将丢失。

关于c# - XNA 的 Vector2 类,属性在尝试更改其值时返回错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11129581/

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