C#新手求助:如何修改另一个类中的变量?
搞定C#跨类修改余额变量的问题
嘿,作为C#新手碰到跨类访问变量的问题太正常啦,我来一步步给你捋清楚怎么弄~
第一步:正确设计存储余额的类
你原来写的private class Balance有个小问题:private修饰的类只能在它所在的父类内部访问,其他类根本看不到它!所以首先得调整类的访问级别,同时做好封装(这是C#的核心好习惯哦):
// 改成public(如果是同一个项目内使用,也可以用internal) public class BalanceManager { // 用私有字段存实际余额,避免外部直接修改 private decimal _currentBalance; // 公开属性,方便外部读取/修改(也可以拆分get和set加权限) public decimal CurrentBalance { get => _currentBalance; set => _currentBalance = value; } // 更推荐:写专门的方法处理余额变动,能加验证逻辑 public void Deposit(decimal amount) { if (amount <= 0) throw new ArgumentException("充值金额必须大于0!"); _currentBalance += amount; } public void Withdraw(decimal amount) { if (amount <= 0) throw new ArgumentException("扣款金额必须大于0!"); if (_currentBalance < amount) throw new InvalidOperationException("余额不足!"); _currentBalance -= amount; } }
第二步:在另一个类里修改余额
有两种常用的方式,根据你的场景选:
方式1:创建类的实例访问
如果每个用户(或场景)都需要独立的余额实例,就直接new一个对象:
public class UserService { public void HandleUserDeposit() { // 创建BalanceManager实例 var balanceManager = new BalanceManager(); // 方式A:直接修改属性 balanceManager.CurrentBalance += 200; // 方式B:用封装好的方法(更安全) balanceManager.Deposit(200); } }
方式2:用单例模式(全局唯一余额)
如果整个程序里只有一个用户余额(比如单用户系统),可以用单例确保全局只有一个实例:
public class BalanceManager { // 静态实例,全局唯一 private static readonly BalanceManager _instance = new BalanceManager(); // 私有构造函数,禁止外部new实例 private BalanceManager() { } // 公开静态属性获取实例 public static BalanceManager Instance => _instance; private decimal _currentBalance; public decimal CurrentBalance { get => _currentBalance; set => _currentBalance = value; } public void Deposit(decimal amount) { if (amount > 0) _currentBalance += amount; } }
然后在其他类里这样用:
public class PaymentService { public void ProcessPayment() { // 通过单例实例操作余额 BalanceManager.Instance.Withdraw(150); // 或者直接改属性 // BalanceManager.Instance.CurrentBalance -= 150; } }
关键提醒
- 尽量不要把余额变量直接设为
public,没有封装的话,其他类可能会乱改数值,很容易出bug; - 如果是多线程场景(比如并发充值/扣款),还要加线程安全处理(比如用
lock),不过新手可以先搞定基础场景~
内容的提问来源于stack exchange,提问作者Reef Proctor
相关产品推荐
相关产品推荐

