c#修改另一个类的标签

本文关键字:标签 另一个 修改 | 更新日期: 2023-09-27 18:11:30

我是c#的新手,我被一件烦人的事情卡住了。首先这是我遇到问题的代码:

        private void Refresher_Tick(object sender, EventArgs e)
    {
        LabelInf.Text = "Infected : " + Vars.infected; // Infected
        ZAmount.Text = "Zombies : " + Vars.zombies; // Zombies
        ZCost.Text = "Cost : " + Costs.ZombieCost; // Next Zombie Cost
    }
}

:

 class Costs
{
    internal static double ZombieCost = (Math.Floor(10 * Math.Pow(1.25, Vars.zombies)));
}

最后:

 public static void ZombieBuy()
    {
        if (Vars.infected >= Costs.ZombieCost) {
            Vars.zombies = Vars.zombies + 1;
            Vars.infected = Vars.infected - Costs.ZombieCost;
        }
        else
        {
            MessageBox.Show("Not Enough Infected To Sacrifice !","Insufficient Infected");
            return;
        }
    }

我想做的是,当我买一个僵尸,新的成本显示在我的标签(ZCost),一切都在工作,但不是成本,这是真的很奇怪。新的僵尸成本在Costs类中计算,ZombieBuy()在Actions类中,然后由主表单中的按钮触发。

c#修改另一个类的标签

您定义了一个值:

internal static double ZombieCost = (Math.Floor(10 * Math.Pow(1.25, Vars.zombies)));

但是你在哪里修改过这个值呢?定义值的表达式在第一次静态加载类时求值一次。表达式本身不会被保存,以后也不会重新求值。

你的选择是在每次需要更新时修改值,或者将静态成员转换为静态方法,每次都重新求值。例如:

internal static double ZombieCost
{
    get { return (Math.Floor(10 * Math.Pow(1.25, Vars.zombies))); }
}

此属性(编译器在后台将其转换为方法)每次被调用时都会重新计算,而不是在程序第一次加载时只计算一次。

我推荐这种方法,而不是继续修改值,因为它将计算值的逻辑和责任封装到Costs对象中,而不是使其成为消费代码的责任。