在谈论自动生成的属性时,大多数示例都会讨论“简单”的值类型,例如字符串。但是,如果您想要访问IL中自动生成的这种值类型的字段以备份“自动属性”,该怎么办?
编译器不允许这样做:“无法修改'Position'的返回值,因为它不是变量”。我理解为什么我们不能修改这个返回值,但是我们如何才能访问这些字段呢?
说我们有
class A
{
Vector2 Position { get; set; }
public void Foo()
{
Position.X = 10.0f; // Not allowed!
}
}
如何在A类中访问和设置Vector2实例的字段X?
答案 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);