Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 变量只读_C#_Oop_Readonly_Access Modifiers - Fatal编程技术网

C# 变量只读

C# 变量只读,c#,oop,readonly,access-modifiers,C#,Oop,Readonly,Access Modifiers,我在更改不同类的变量时遇到问题。即使我使用了访问修饰符(get和set),编译器仍然认为它是只读的,并且我不能在另一个类中更改它 private float speed; public float Speed { get {return speed;} set {speed = value;} } 我不确定这是否重要,但这个变量来自我的主抽象类,我在其他类中使用它。这里发生的事情是,我在一个类(Player.cs)中为这个变量赋值,并试图在另一个类中通过初始化它的对象(Phy

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

private float speed;

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

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

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

public class Physics
{
    private readonly float speed;

    public Physics()
    {
        this.speed = 5;
    }
}
您可以只设置一次
只读
变量

如果在对象的生命周期内确实需要更改
速度
,为简单起见,只需使用auto属性即可:

public float Speed {get; set;}

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


(如果我正确理解了您的问题,也就是说,我很困惑,但是……如果您试图直接访问速度变量,那么为什么要使用公共属性?)

请确保尝试更改
速度
,而不是
速度
。是否使用相同的实例?您在哪里指定属性为
只读
<代码>格兰特·温尼(Grant Winney)很好,我刚刚重新阅读了它,它的措辞误导了代码的编写方式,实际上应该是有效的。。我删除了我的评论也许OP在代码中做了一些错误,并在过程中的其他地方覆盖了它对不起that@Meetz:正如你所描述的,没有理由不工作。您需要在问题中包含一个(简化的)关于三个类的实际用法的示例(单击编辑按钮-不要尝试在注释中添加代码)。