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

use*_*325 2 c# properties

在谈论自动生成的属性时,大多数示例都会讨论"简单"的值类型,例如字符串.但是,如果您想要访问IL中自动生成的这种值类型的字段以备份"自动属性",该怎么办?

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

说我们有

class A
{
    Vector2 Position { get; set; }

    public void Foo()
    {
        Position.X = 10.0f;    // Not allowed!
    }
}
Run Code Online (Sandbox Code Playgroud)

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

Ed *_* S. 5

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

你的问题是,Vector2不是引用类型; 它是一种价值类型.当您访问该属性时Position,将返回一个副本,因此您试图改变临时变体.在这种情况下,您需要设置一个全新的值:

Position = new Vector2(10.0, Position.Y);
Run Code Online (Sandbox Code Playgroud)

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

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

    public void Foo()
    {
        _position.X = 10.0f;  
    }
}
Run Code Online (Sandbox Code Playgroud)

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