如何在C#类的方法中访问修改另一个类的成员变量
问题解决方法
要在Enemy类的方法中访问Player类的变量,核心逻辑很简单:你当前定义的Health、AttackDamage都是实例成员,归属于类创建出来的具体对象,而不是类本身,你只需要把要操作的Player对象作为参数传入Enemy的方法,就能直接访问它的公开变量。
具体实现步骤
1. 给Enemy类添加攻击方法
在Enemy类中定义攻击逻辑的方法,方法参数设置为Player类型,用来接收被攻击的玩家对象,方法内部直接操作传入对象的血量即可:
class Enemy { public int Health = 100; public int AttackDamage = 20; // 攻击方法:targetPlayer就是要被攻击的玩家对象 public void Attack(Player targetPlayer) { // 玩家血量扣除当前敌人的攻击力 targetPlayer.Health -= this.AttackDamage; } } class Player { public int Health = 100; public int AttackDamage = 20; }
2. 实例化对象并调用方法验证
类本身只是模板,实际运行时需要先创建出具体的敌人、玩家对象,再调用攻击方法,把玩家对象作为参数传入:
// 创建一个具体的敌人实例、一个具体的玩家实例 Enemy goblin = new Enemy(); Player player = new Player(); Console.WriteLine($"受攻击前玩家血量:{player.Health}"); // 输出:100 // 敌人执行攻击,传入要攻击的玩家对象 goblin.Attack(player); Console.WriteLine($"受攻击后玩家血量:{player.Health}"); // 输出:80
关键逻辑说明
- 不要直接尝试通过
Player.Health这种写法访问变量:你可以同时创建多个独立的玩家对象,每个对象的血量、攻击力都是单独存储的,直接写类名访问,程序无法判断你要修改哪个玩家的数值。 - 把Player对象作为参数传入方法,本质就是明确告诉攻击方法:你要攻击的是这个特定的玩家对象,扣他的血量。
- 代码中
this.AttackDamage指代的是当前调用Attack方法的敌人自己的攻击力,如果你后续创建多个攻击力不同的敌人实例,每个敌人攻击时都会自动使用自身的攻击力数值计算伤害,不会混淆。
拓展:如果要实现玩家攻击敌人的逻辑,写法完全一致——在Player类中添加Attack方法,参数设置为Enemy类型,传入要攻击的敌人实例即可。
内容的提问来源于stack exchange,提问作者Zen609
相关产品推荐
相关产品推荐

