C# 变量只读
我在更改不同类的变量时遇到问题。即使我使用了访问修饰符(get和set),编译器仍然认为它是只读的,并且我不能在另一个类中更改它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
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:正如你所描述的,没有理由不工作。您需要在问题中包含一个(简化的)关于三个类的实际用法的示例(单击编辑按钮-不要尝试在注释中添加代码)。