2

大多数关于自动生成的属性的例子都在谈论“简单”的值类型,例如字符串。但是,如果您想访问在 IL 中自动生成的此类值类型的字段以备份“自动属性”怎么办?

编译器不允许这样做:“不能修改 'Position' 的返回值,因为它不是变量”。我理解为什么我们不能修改这个返回值,但是我们如何访问这些字段呢?

说我们有

class A
{
    Vector2 Position { get; set; }

    public void Foo()
    {
        Position.X = 10.0f;    // Not allowed!
    }
}

如何访问和设置类 A 中 Vector2 实例的字段 X?

4

2 回答 2

5

访问从属性自动生成的引用类型

您的问题是这不是Vector2参考类型;它是一个值类型。当您访问该属性时,会返回一个副本,因此您正在尝试改变一个临时的。在这种情况下,您需要设置一个全新的值:Position

Position = new Vector2(10.0, Position.Y);

在这种情况下,您还可以创建一个私有字段而不使用自动属性:

class A
{
    Vector2 _position;
    Vector2 Position 
    { 
        get { return _position; } 
        set { _position = value; }
    }

    public void Foo()
    {
        _position.X = 10.0f;  
    }
}

文档:http: //msdn.microsoft.com/en-us/library/microsoft.xna.framework.vector2.aspx

于 2012-08-19T18:02:38.953 回答
2

Vector2 实际上是一个值类型,而不是引用类型。您必须创建一个新的 Vector2:

Postion = new Vector2(10.0f, Position.Y);
于 2012-08-19T18:03:42.500 回答