C# 如何在windows窗体中保存对象的状态

C# 如何在windows窗体中保存对象的状态,c#,winforms,C#,Winforms,无法在我的windows窗体应用程序中永久更改字段值 如果这是其他地方的答案,请原谅我。我确实看了,没有发现任何具体的东西。我正在尝试在windows窗体应用程序中设计一个小游戏。然而,我遇到的一个问题是,当我在按钮事件中更改字段的值时,它不会永久应用更改。因此,当我再次单击按钮时,它不会将monster hp减少到8,它只是重复代码,就好像它是第一次执行它一样。我尝试过使用静态变量和ref变量,但也许我用错了 public partial class Form1 : Form {

无法在我的windows窗体应用程序中永久更改字段值

如果这是其他地方的答案,请原谅我。我确实看了,没有发现任何具体的东西。我正在尝试在windows窗体应用程序中设计一个小游戏。然而,我遇到的一个问题是,当我在按钮事件中更改字段的值时,它不会永久应用更改。因此,当我再次单击按钮时,它不会将monster hp减少到8,它只是重复代码,就好像它是第一次执行它一样。我尝试过使用静态变量和ref变量,但也许我用错了

 public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void PlayerHealth_Click(object sender, EventArgs e)
        {

        }

        public void MonsterHealth_Click(object sender, EventArgs e)
        {

        }

        private void AttackBtn_Click(object sender, EventArgs e)
        {
            Player player = new Player();
            Monster monster = new Monster();

            player.AttackMonster(player, monster);
            MonsterHealth.Text = monster.HP.ToString();
        }
    }

    public class Player
    {
        public int HP { get; set; }
        public int Attack = 1;

        public void AttackMonster(Player player, Monster monster)
        {
           monster.HP -= player.Attack;

        }
    }

    public class Monster
    {
        public int HP = 10;
        public int Attack { get; set; }
    }

}

我的目标是让HP字段在每次单击按钮时减少一个。目前情况并非如此。

HP变量没有递减,因为您在每次
攻击中都会创建Monster类的新实例。

为了避免它,请创建Monster实例的类级属性,并在类级实例化它,然后在
AttackBtn\u Click()函数中使用它

public partial class Form1 : Form
{
    public Monster MonsterInstance { get; private set; } = new Monster();
    public Player PlayerInstance { get; private set; } = new Player(); 

    public Form1()
    {
        InitializeComponent();
    }

    //Your business logic

    private void AttackBtn_Click(object sender, EventArgs e)
    {
        PlayerInstance.AttackMonster(PlayerInstance, MonsterInstance);
        MonsterHealth.Text = MonsterInstance.HP.ToString();
    }
}

new
意味着新你想要多少怪物?有了这个设计,
set
可能就没有必要了。谢谢!我试试看@Anthonyabd你的游戏中只有一个怪物吗?没有,我还有更多。@Phil1970,我用
私人设置更新了我的答案