繁体   English   中英

C#我怎么做一个私有集合属性?

[英]c# how do I do a private set property?

我正在像这样创建一个VECTOR对象,但是我正在构造函数中对其进行初始化:

public VECTOR position { get; private set; }

我正在执行此操作:

position.x += 2;

VECTOR的变量x定义为:

public double x { get; set; } 

我执行+=2操作时收到错误消息:

无法修改'Projectile.position'的返回值,因为它不是变量

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

可能您的问题是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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM