C#中BankAccount类的Cents属性Setter完全失效问题求助
问题分析与解决方案
你遇到的问题核心很清晰:你在构造函数里直接给私有字段cents赋值,完全绕过了Cents属性的setter,所以setter里的代码根本没被执行到。
为什么setter没被触发?
看你的构造函数这段代码:
public BankAccount(uint dollars,uint cents) { this.Dollars = dollars; this.cents = cents; // 这里直接操作私有字段,和Cents属性无关 }
这里你直接赋值给了类内部的私有字段cents,而不是通过公开的Cents属性。不管你在Cents的setter里写了什么逻辑,都不会被触发——因为你从来没调用过这个setter。
修复方案
把构造函数里的赋值语句改成操作Cents属性,而不是私有字段:
class BankAccount { public BankAccount(uint dollars,uint cents) { this.Dollars = dollars; this.Cents = cents; // 现在会调用Cents属性的setter } public uint Dollars { get; private set;} private uint cents; public uint Cents { get { return cents; } private set { cents = 500; // 现在这个赋值会生效 Console.WriteLine("It's been written in Cents setter"); // 这句也会被打印 } } }
运行修改后的代码,你会看到控制台输出It's been written in Cents setter,并且a.Cents的值会变成500——完全符合你在setter里定义的逻辑。
补充说明:你的Cents setter是private修饰的,只有类内部代码可以调用,构造函数属于类内部逻辑,所以这么写是完全合法的。
内容的提问来源于stack exchange,提问作者Paweł Michoń
相关产品推荐
相关产品推荐

