C# 如何更改只读变量';s值多少?

C# 如何更改只读变量';s值多少?,c#,C#,我有一个Account类,它包含一个只读变量余额。 构造函数将默认值指定为0 但我想在调用CashIn方法时更新该值。 我试过这个: class Account { private string name; private readonly double balance; public Account(string n, double b) { name = n; balance = b; } public vo

我有一个Account类,它包含一个只读变量余额。 构造函数将默认值指定为0

但我想在调用
CashIn
方法时更新该值。 我试过这个:

class Account
{
    private string name;
    private readonly double balance;

    public Account(string n, double b)
    {
        name = n;
        balance = b;
    }

    public void CashIn(double amount)
    {
        balance = balance+amount;
    }
}
但正如我所知,只读变量可以通过构造函数或字段赋值

当我调用
CashIn
方法时,是否可以更新余额?
如果是,请描述我是如何做到的

只读的全部要点是,除了在构造函数中,您不能这样做。由于
readonly
是一种语言级功能,而不是严格的运行时保证:您可以作弊(通过反射或
safe
或各种其他邪恶),但在我看来,最实用的方法是:删除
readonly
修饰符。因为您似乎不希望它是只读的。

创建一个私有变量和一个返回其值的公共只读属性,这样您就可以编辑同一类中的变量,但它对其他类是只读的

private double balance_;

public double Balance
{
    get
    {
        return balance_;
    }
 }
或者你可以使用私人设置

public double Balance { get; private set; }
查看此链接了解更多信息:

readonly
修饰符和“readonly”属性的概念之间有很大区别

readonly
修饰符表示只能在构造函数中设置字段。您将无法将该变量设置为构造函数之外的任何其他变量。考虑到你的代码(一个银行账户模拟器)的上下文,你会有一个永远不会改变的余额,这看起来很奇怪。这让我相信你想要一个只读属性

属性是存储具有get/set方法的简单数据的首选方式。对于一个银行账户模拟器来说,仅仅向公众披露余额是非常糟糕的,对吗?因此,我认为在这种情况下,拥有一个具有公共读取和私有集的属性更有意义:

public decimal Balance { get; private set; }
这允许公开读取它,但只允许在类内部修改它(即从您编写的自定义方法,如
CashIn()


请注意我如何使用
decimal
而不是
double
。货币值应始终表示为十进制,这是一个简单的解决方案,即删除变量的只读标记。初始化只读变量后,不能更改其值。
您可以在创建对象时对其进行初始化,然后在该对象的生命周期内将其视为常量。

如果您要更改该值,它不是
只读的
,实际上我得到了一个分配,告诉您保持平衡为只读。那我怎么做呢?如何更改该值?我认为应该创建一个返回变量的只读属性value@jerinsifat
readonly
和只读属性之间存在巨大差异。我想您的任务是使用一个只有get的属性(即只读属性),而且您永远不应该使用
double
来存储货币值。这就是为什么十进制存在的原因;涵盖了我想的一切,非常感谢。我误解了只读属性。这只是一个有用且详细的答案
public void CashIn(decimal amount)
{
    Balance += amount;
}