C# 如何更改只读变量';s值多少?
我有一个Account类,它包含一个只读变量余额。 构造函数将默认值指定为0 但我想在调用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
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@jerinsifatreadonly
和只读属性之间存在巨大差异。我想您的任务是使用一个只有get的属性(即只读属性),而且您永远不应该使用double
来存储货币值。这就是为什么十进制存在的原因;涵盖了我想的一切,非常感谢。我误解了只读属性。这只是一个有用且详细的答案
public void CashIn(decimal amount)
{
Balance += amount;
}