我正在创建一个VECTOR
对象,但是我在构造函数中初始化它:
public VECTOR position { get; private set; }
我正在做这个操作:
position.x += 2;
VECTOR
的变量x定义为:
public double x { get; set; }
当我执行+=2
操作时,我收到错误:
无法修改'Projectile.position'的返回值,因为它是 不是变量
我希望能够修改当前类中的位置向量,我希望它可以访问但在其他类中不可修改。
答案 0 :(得分:1)
您的问题可能是Vector
类实际上是struct
。假设您有以下声明:
public class Projectile
{
public VECTOR position { get; private set; }
public Projectile()
{
position = new VECTOR();
}
}
public struct VECTOR
{
public double x {get; set;}
}
您无法直接编辑position
属性的属性,因为您正在访问该字段的副本(解释为here)。
如果你不想将你的VECTOR转换成一个类,你可以添加一个更新你的射弹位置的方法:
public void UpdatePosition(double newX)
{
var newPosition = position;
newPosition.x = newX;
position = newPosition;
}
这将创建位置的副本,然后更新其x属性并覆盖存储的位置。用法类似于:
p.UpdatePosition(p.position.x + 2);
答案 1 :(得分:-1)
在类中公开VECTOR的X属性(和其他)。
public class myObject {
private VECTOR position;
public double X { get{return position.x;}set{position.x=value;}}
}
用法示例: myObject.X + = 2;