在谈论自动生成的属性时,大多数示例都会讨论"简单"的值类型,例如字符串.但是,如果您想要访问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?
访问从属性自动生成的引用类型
你的问题是,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
| 归档时间: |
|
| 查看次数: |
68 次 |
| 最近记录: |