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

时间:2012-08-19 18:01:13

标签: c# properties

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

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

说我们有

class A
{
    Vector2 Position { get; set; }

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

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

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

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