【问题标题】:XNA's Vector2 class, property returns an error when attempting to change its valueXNA 的 Vector2 类,属性在尝试更改其值时返回错误
【发布时间】:2012-06-20 23:24:22
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# properties xna accessor


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-07-01
        • 2013-08-16
        • 2021-11-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多