【问题标题】:Variable read only [closed]变量只读[关闭]
【发布时间】:2015-01-31 04:51:06
【问题描述】:

我在更改不同类的变量时遇到问题。即使我使用了访问修饰符(get 和 set),编译器仍然认为它是只读的,我不能在另一个类中更改它。

private float speed;

public float Speed
{
    get {return speed;}
    set {speed = value;}
}

我不确定这是否重要,但这个变量来自我的主要抽象类,我在其他类中使用它。这里发生的事情是,我在一个类(Player.cs)中为这个变量赋值,我试图通过初始化它的对象(Physics.cs)在另一个类中改变它。它们都继承自那个主要的抽象类。

【问题讨论】:

  • 确保您尝试更改 Speed 而不是 speed
  • 您使用的是同一个实例吗?
  • 你在哪里指定属性是readonly ..? Creating Read-Only Properties
  • Grant Winney 好点我只是重新阅读它,措辞误导了代码编写方式实际上应该有效。我删除了我的评论,也许 OP 在代码中做错了什么并在此过程中的其他地方覆盖它对此感到抱歉
  • @Meetz:正如你所描述的,它没有理由不工作。您需要在问题中包含三个类的实际使用情况的(简化)示例(单击编辑按钮 - 不要尝试将代码放在评论中)。

标签: c# oop readonly access-modifiers


【解决方案1】:

如果您尝试从子类访问速度,请确保在基类中将其定义为受保护(非私有)。私人真的是私人的。定义它的类之外的任何东西都不能访问它。 Protected 允许继承的类访问它。

(如果我正确理解了您的问题,那就是。不过,我很困惑……如果您尝试直接访问速度变量,那么为什么要有公共属性?)

【解决方案2】:

如果您只设置一次speed,只需使用只读变量并在构造函数中设置它:

public class Physics
{
    private readonly float speed;

    public Physics()
    {
        this.speed = 5;
    }
}

您可以只设置一次readonly 变量。

如果您确实需要在对象的生命周期内更改 speed,为了简单起见,无论如何都只需使用 auto 属性:

public float Speed {get; set;}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-01
    • 2015-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-20
    相关资源
    最近更新 更多