You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 03:51:21