C# 如何执行私有集属性

本文关键字:属性 执行 何执行 | 更新日期: 2023-09-27 18:33:21

我正在创建一个这样的VECTOR对象,但我正在构造函数中初始化它:

public VECTOR position { get; private set; }

我正在执行此操作:

position.x += 2;

VECTOR有一个变量 x 定义为:

public double x { get; set; } 

当我执行+=2操作时出现错误,该操作显示:

无法修改"弹丸位置"的返回值,因为它是 不是变量

我希望

能够修改当前类中的位置向量,并且我希望它可以在其他类中可访问但不可修改。

C# 如何执行私有集属性

可能,您的问题在于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 属性的属性,因为您正在访问该字段的副本(此处已解释)。

如果您不想将 VECTOR 转换为类,您可以添加一个更新弹丸位置的方法:

public void UpdatePosition(double newX)
{       
    var newPosition = position;
    newPosition.x = newX;
    position = newPosition;
}

这将创建仓位的副本,然后更新其 x 属性并覆盖存储的仓位。用法将类似于这样:

p.UpdatePosition(p.position.x + 2);

在类中公开 VECTOR 的 X 属性(和其他属性)。

public class myObject {
private VECTOR position;
public double X { get{return position.x;}set{position.x=value;}}
}

使用示例: myObject.X += 2;