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

时间:2012-06-20 23:24:23

标签: c# properties xna accessor

如果我只是愚蠢的话,我对编程很新,对我这么光鲜!谢谢^ _ ^

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

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的值时,我收到错误“无法修改表达式,因为它不是变量”。我不确定为什么会发生这种情况,并且没有任何运气在网上看,我想知道为什么这是以及如何(如果)我能解决它?

另一个子问题,在他们所属的类中工作时使用公共属性或私有/受保护字段是否是良好的编程习惯?

非常感谢! < 3

2 个答案:

答案 0 :(得分:4)

你应该很高兴编译器不允许你这样做,否则你会对操作失败的结果感到惊讶。

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

答案 1 :(得分:1)

Vector2是一个结构(值类型),因此您的属性返回_myVector的值(即副本),您无法更改它。